所以我试图理解为什么当我将 git merge master
merge 到分支中时,我会丢失一些提交中的更改,但不是全部。这似乎与我的分支上的选择性提交有关。重现方法如下:
- 通过初始提交初始化存储库
- 向文件添加一行文本并提交
- 将其分支,称之为“测试”
- 在分支主机上,恢复第二次提交
- 精挑细选提交到测试分支
- 返回 master,创建一个新的提交来恢复该文本行,并添加其他更改
- 返回测试,运行
git merge master
- 请注意, merge 会自动删除该行文本(!!!),但保留其他更改。我希望 merge 不会删除该行,以便它与
master
匹配。
我将结果上传到github:https://github.com/terryttsai/testRevertMerge/commits/test
如果我从未选择将提交提交到我的 test
分支中,那么 git merge master
确实会保留该行文本。那么为什么当我确实有那个cherry-pick提交时, merge 会删除它呢?我怎样才能从一开始就防止这种情况发生?
最佳答案
I expect the merge to not drop that line, so that it matches master.
没有。 git merge master
并不意味着匹配master!
什么是 merge ? merge 意味着从分歧点开始,发挥两个分支的贡献。它们是什么?
嗯,分歧点是在添加第一行之后。那么之后在每个分支上发生了什么?
在master上,唯一的贡献就是额外的东西。 (它删除了第一行,但后来又恢复了它,所以这不是贡献;在这方面什么也没有发生。)
在测试中,唯一的贡献是删除第一行(这就是挑选的恢复提交所做的)。
因此, merge 同时完成了这两件事:来自 master 的额外行,以及来自 test 的删除。
但是如果您从不进行樱桃选择,那么两个分支都不会做出删除该行的贡献,因此显然它不会被 merge 删除。
关于git - 为什么“cherry-pick”会导致 git merge 丢弃我的部分提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65673588/