所以我试图理解为什么当我git merge master
进入分支时,我会在提交中丢失一些但不是所有的更改。这似乎与我树枝上的樱桃树有关。以下是如何复制:
- 使用初始提交初始化repo
- 向文件中添加一行文本并提交
- 把这个分支开,称之为";测试">
- 在分支主机上,恢复第二次提交
- Cherry pick提交到测试分支
- 返回master,创建一个新的提交以恢复该行文本,并添加其他更改
- 返回测试,运行
git merge master
- 请注意,合并自动删除了该行文本(!!!(,但保留了其他更改。我希望合并不会删除该行,以便它与
master
匹配
我在github上上传了我的结果:https://github.com/terryttsai/testRevertMerge/commits/test
如果我从未在test
分支中精心选择过该提交,那么git merge master
确实保留了这行文本。那么,为什么当我真的进行了樱桃选择提交时,合并会将其删除呢?我如何从一开始就防止这种情况发生?
我希望合并不会删除那一行,这样它就会匹配master。
否。git merge master
并不意味着匹配master!
什么是合并?合并意味着从分歧点开始计算 两个分支的贡献分歧点在第一行加上之后。那么之后在每个分支上发生了什么? 在大师身上,唯一的贡献就是额外的东西。(它删除了第一行,但后来恢复了它,所以这不是一个贡献;在这方面,什么都没有发生。( 在测试中,唯一的贡献是删除第一行(这就是精心挑选的reverse-commit所做的(。 所以合并同时执行这两个操作:从master中删除多余的行,从test中删除。 但是,如果你从不进行樱桃采摘,那么两个分支都不会删除那一行,所以很明显,合并不会删除它。