我在 X 分支工作,从 Y 分支接收交付,而 Y 分支是由其他开发人员维护的,我将 Y 分支合并到 X 分支,但需要将 Y 分支的一些错误提交恢复到'KKK'文件中,并在他们修复其他变化时继续工作。这就导致我在 X 分支中对文件 'KKK' [我通常从不碰它]进行了还原提交,这意味着 'KKK' 在我的分支中被还原为 'Version A' ,而在 Y 分支中继续工作。
当 "KKK "在 "Version I "时变得更成熟时,我又把Y分支合并到X分支,这次我希望 "KKK "能更新到 "Version I"。但git却在合并时自动将我的还原提交为 "版本A",而忽略了 "版本I"。文件仍然在 "版本A"。为什么会出现这种情况?是不是我的工作方式出了问题?
我感觉这与 "快进合并 "有关,但我不确定。我试着在这里将其可视化。
先谢谢你。
当你还原一些东西时,它意味着 "我不想要这个变化。曾经" (因为它已经坏了)。
当合并分支时,Git(或任何DVCS)只会合并 新变化 的新提交。你所还原的变更已经被合并了,所以它不会被重新合并(否则还原的整个意义就会是徒劳的--SCM怎么知道哪些是真正的还原,哪些不是?
从视觉上看。
A-B-M-C'--X-... <- branch a
/ /
C-D-----E--.. <- branch b
通过提交 C
变革与承诺 C'
还原上述提交的变更。承诺 M
和 X
都是合并。当你第一次调用合并来创建提交 M
百变 C
和 D
被包括在内。当您第二次运行合并进行提交时 X
的变化,只有 E
合并了,因为所有其他分支的变化 b
已有分支 a
.
现在,如何将初始和后续的变化转化为分支。a
? 重新恢复提交,换句话说,就是执行 git revert C'
合并前的分支 b
再次。这样一来,分支 a
在应用任何新的更改之前,再次包含原来的更改(例如提交 E
).