将主头移动到分支

kos*_*tja 12 git version-control branch dvcs branching-and-merging

我有几个功能分支和一个主分支.功能2完成.通常我会改变(使用远程SVN仓库并希望保留历史记录,因此没有定期合并)和ff-merge.但是因为我分支后主人没有改变,所以我想将主头(at E)移动到G.使用git branch -f master G不会导致任何可见的更改,我认为这是因为G在不同的分支上.

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

feature1      C-D  
             /
master    A-B-E            
               \                      
feature2        F-G  
Run Code Online (Sandbox Code Playgroud)

谢谢.

ral*_*nja 12

您不必合并分支,重置就足够了.假设主人被检出:

git reset --hard feature2
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,重置在功能上等同于快进合并. (2认同)

GoZ*_*ner 9

不需要合并 - 只需重命名分支.既然你不关心feature2('已完成'),也不关心现有的主人('E')你只需要以下内容.

git branch -d master
git branch -m feature2 master
Run Code Online (Sandbox Code Playgroud)

简单更好?

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

  1. Git提交图,和
  2. Git参考

当您进行合并(各种风格并包括rebase)时,您正在更改提交图.这些更改涉及添加节点,添加链接或可能移动链接.引用(包括分支和标记)仅指向提交,因此更改引用只会更改指向提交 - 而不是图形的结构.

因此,在您的情况下,不需要对结构进行任何更改,只需更改引用即可.

一行版本是:

git branch -f master feature2
Run Code Online (Sandbox Code Playgroud)

这使得feature2分支保持不变(不同于之前的双线轴,即特征2).


ell*_*eth 9

定期将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
Run Code Online (Sandbox Code Playgroud)