14

我有几个功能分支和一个主分支。Feature2 完成。通常我会变基(使用远程 SVN 存储库并希望保留历史记录,因此没有定期合并)和 ff-merge。但是自从我分支以来master没有改变,我想将master head(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  

谢谢你。

4

5 回答 5

14

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

git reset --hard feature2
于 2012-05-25T13:07:27.270 回答
11

无需合并 - 只需重命名分支。由于您不关心功能 2(“完成”)或现有主控(在“E”处),您只需要以下内容。

git branch -d master
git branch -m feature2 master

简单更好?

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

  1. Git 提交图,以及
  2. Git 参考资料

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

因此,在您的情况下,不需要更改结构,只需更改引用即可。

单行版本是:

git branch -f master feature2

它保持 feature2 分支(与之前的两个轴 feature2 不同)。

于 2012-05-25T14:37:17.410 回答
10

将 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
于 2012-05-25T22:29:16.030 回答
1

update-ref 是安全的。一个支头无非就是一点点“读我!” 标签挂在提交上。按照惯例,git 有时会捡起它并将其挂在不同的提交上。

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

说什么git log --decorate --oneline --allgit show master?

于 2012-05-25T13:07:37.690 回答
0

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

feature1      C-D  
             /
master    A-B-E-----H          
               \   /                   
feature2        F-G 
于 2012-05-25T11:23:18.987 回答