[英]Git, merging branches git
我不确定您的问题是什么,但是您可能无法完全理解这里发生的两件事。
首先,我认为git merge master coins
并没有您认为的那样。
git merge master coins
并没有说将master
合并成coins
。 它说将master
和 coins
合并到当前签出的分支中。 这是因为master coins
是要合并到当前分支中的分支的列表。 从文档 ...
[git merge]将命名提交的更改(自其历史记录与当前分支分开以来的时间) 合并到当前分支中 。
如果检出了master
,则它将硬币合并到母版中。 如果检出了coins
,则它将master
合并为coins
。 如果签出了其他内容,您将得到所谓的“章鱼合并”,并且master
, coins
和当前分支这三个都合并在一起,可能是一团糟。
就目前而言,您已与已检出的master
合并,因此git merge master coins
与git merge coins
相同。 您将coins
合并master
,我想这是您想要的,但是它可能变糟了。
因此,请勿使用该语法。 它会给您带来麻烦,并且通过查看命令历史记录很难知道实际发生了什么。 而是使用git checkout branch-to-merge-into; git merge branch-to-merge-from
git checkout branch-to-merge-into; git merge branch-to-merge-from
。 因此,如果要将硬币合并成master,请使用git checkout master; git merge coins
git checkout master; git merge coins
。
下一个问题是关于快进合并。 当不需要合并时,分支没有分歧时,Git会执行此操作。 例如,假设您有这个...
A - B - C - D - G [master]
\
E - F - H [feature]
由于master
具有与feature
(D和G)不同的更改,因此必须合并。 所以git checkout master; git merge feature
git checkout master; git merge feature
导致新的合并提交。
A - B - C - D - G - I [master]
\ /
E - F - H [feature]
但是,如果master
上没有新的提交,则可以使用它( master
指向C)。
[master]
A - B - C - E - F - H [feature]
据说feature
上没有与master
背道而驰。 不需要合并提交,因此Git不会打扰任何人。 当你做git checkout master; git merge feature
git checkout master; git merge feature
,只需将master
移至H。
[master]
A - B - C - E - F - H [feature]
Git之所以可以这样做是因为“分支”实际上只是指向提交的标签。 现在, master
和feature
指向同一提交。
我建议在合并要素分支时避免快进,因为它会丢失重要的考古信息。 稍后查看存储库的人无法分辨E,F和H都是作为单个分支完成的。
我建议始终将功能分支与git merge --no-ff
。 这迫使Git进行合并提交,将来尝试弄清楚您的代码的人可以知道E,F和H都是更大整体的一部分。
A - B - C --------- I [master]
\ /
E - F - H [feature]
合并提交I还为您提供了一个描述分支的地方,并添加了指向问题/错误/票证的链接之类的内容,以描述分支的用途。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.