我有几个功能分支和一个主分支。功能2完成。通常我会改变(使用远程SVN仓库并希望保留历史记录,因此没有定期合并)和ff-merge。但是因为我分支后主人没有改变,所以我想把主人头(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
谢谢。
答案 0 :(得分:12)
您不必合并分支,重置就足够了。假设主人被签出:
git reset --hard feature2
答案 1 :(得分:8)
不需要合并 - 只需重命名分支。既然你不关心feature2('已完成'),也不关心现有的主人('E')你只需要以下内容。
git branch -d master
git branch -m feature2 master
简单更好?
请记住,涉及两个关键概念:
当您进行合并(各种风格并包括rebase)时,您正在更改提交图。这些更改涉及添加节点,添加链接或可能移动链接。引用(包括分支和标记)仅指向提交,因此更改引用只会更改指向的提交 - 而不是图的结构。
因此,在您的情况下,不需要对结构进行任何更改,只需更改引用即可。
单行版本是:
git branch -f master feature2
保持feature2分支(不同于之前的两个轴的特征2)。
答案 2 :(得分:8)
定期将G合并到主人身上就可以了,不需要改变:
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
答案 3 :(得分:1)
update-ref是安全的。一个分支头只不过是一个“读我!”标记挂在提交上。纯粹按照惯例,git会把它捡起来,并且有时候会把它挂在不同的提交上。
使用git branch -f master G不会导致任何可见的更改
git log --decorate --oneline --all
说什么? git show master
?
答案 4 :(得分:0)
如果您已检出主分支,则最好使用git merge --no-ff feature2
执行功能2到主服务器的非快速前向合并。您最终应该使用以下内容
feature1 C-D
/
master A-B-E-----H
\ /
feature2 F-G