我不确定您的问题是什么,但认为这里发生了两件事您可能无法完全理解。
首先,我认为git merge master coins 不会像你认为的那样做。
git merge master coins 不说要将master 合并到coins。它说将master 和 coins 合并到当前签出的分支中。那是因为master coins 是要合并到当前分支的分支列表。 From the docs...
[git merge] 将来自命名提交的更改(自从它们的历史与当前分支分道扬镳以来)合并到当前分支中。
如果master 被签出,那么它将硬币合并到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 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 会产生一个新的合并提交。
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 时,它只会将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]
我的合并提交还为您提供了一个描述分支的地方,并添加了诸如指向问题/错误/票证的链接之类的内容,以描述该分支的用途。