Git 将主机头移动到分支

Git 将主机头移动到分支,git,version-control,branch,dvcs,branching-and-merging,Git,Version Control,Branch,Dvcs,Branching And Merging,我有几个功能分支和一个主分支。功能2已完成。通常情况下,我会重新设置基址(使用远程SVN回购,并希望保留历史记录,因此没有定期合并)和ff合并。但是,由于自我分支以来master没有更改,我想将master head(位于E)移动到G。使用git分支-f master G不会导致任何可见的更改,我假设这是因为G位于不同的分支上 在这里使用git update ref-f master G安全吗?我应该坚持使用rebase/ff合并吗?还有更好的吗 feature1 C-D

我有几个功能分支和一个主分支。功能2已完成。通常情况下,我会重新设置基址(使用远程SVN回购,并希望保留历史记录,因此没有定期合并)和ff合并。但是,由于自我分支以来master没有更改,我想将master head(位于
E
)移动到
G
。使用
git分支-f master G
不会导致任何可见的更改,我假设这是因为
G
位于不同的分支上

在这里使用
git update ref-f master G
安全吗?我应该坚持使用rebase/ff合并吗?还有更好的吗

feature1      C-D  
             /
master    A-B-E            
               \                      
feature2        F-G  

谢谢。

如果您已签出到主分支,则最好使用
git merge--no ff feature2将功能2非快进合并到主分支中。您应该以以下内容结束

feature1      C-D  
             /
master    A-B-E-----H          
               \   /                   
feature2        F-G 

您不必合并分支,重置就足够了。假设master已签出:

git reset --hard feature2

更新引用是安全的。分支头只不过是一个挂在提交上的小“读我的!”标签。按照惯例,git有时会将其拾取并挂起到不同的提交上

使用git branch-f master G不会导致任何可见的更改


git日志--decoration--oneline--all
说了什么<代码>git show master?

无需合并-只需重命名分支即可。由于您不关心feature2('is done')或现有的master(位于'E'),因此您只需要以下内容

git branch -d master
git branch -m feature2 master
简单更好

请记住,其中涉及两个关键概念:

  • Git提交图,以及
  • Git引用
  • 当您进行合并(各种风格,包括重基)时,您正在更改提交图。更改包括添加节点、添加链接或移动链接。引用(包括分支和标记)只指向提交,因此更改引用只会更改指向提交的对象,而不是图形的结构

    因此,在您的例子中,不需要对结构进行任何更改,只需更改引用即可

    一行版本是:

    git branch -f master feature2
    

    这将使功能2保持分支(不同于之前的两个轴功能2的衬套)。

    将G定期合并到master中就可以了,无需重新设置基础:

        feature1      C-D  
                     /
        master    A-B-E            
                       \                      
        feature2        F-G
    
    git checkout master
    git merge feature2
    
        feature1              C-D  
                             /
        master, feature2  A-B-E-F-G
    

    我想避免在可能的情况下定期合并到master以保留历史,我在问题中这样说过。还有,为什么你认为无ff合并比ref move更合适?在这种情况下,重置在功能上等同于快进合并。在搜索答案的五分钟后,我尝试了这个方法,它成功了。简单,并且在反思中期待。非常感谢。将
    G
    定期快速合并到
    master
    中有什么问题?不需要重新设定基准。你会保留历史,你会得到一个直线图(
    a-B-E-F-G
    )。啊,它的明显性!该图形看起来与重新设置基础后的图形完全相同。我想知道我为什么会想到别的事情。是否要重新发布作为答案?分支功能2已经有一个“直图”-只需将功能2重命名为master(或将master移动到功能2)@GoZoner这只是一行和两行打字的细微差别。遵循编程的第一个优点;)当然,现在我们都发布了18种方法来做完全相同的事情;pMy bad,我为
    git分支主SHA
    输入了错误的SHA。它确实起作用了。谢谢,戈佐纳。不错的选择,我还没想过。但我想我在我的情况下坚持ff合并。似乎在本地工作。但是如何将更改推送到远程服务器?它抱怨移动“主机”会导致与所有远程设备不一致,从而导致非快进合并。修复方法是git push master--force,但是'--force'参数应该让您警惕它对
    的任何其他用户的影响