为什么cherry pick会导致git merge丢弃我提交的一部分



所以我试图理解为什么当我git merge master进入分支时,我会在提交中丢失一些但不是所有的更改。这似乎与我树枝上的樱桃树有关。以下是如何复制:

  1. 使用初始提交初始化repo
  2. 向文件中添加一行文本并提交
  3. 把这个分支开,称之为";测试">
  4. 在分支主机上,恢复第二次提交
  5. Cherry pick提交到测试分支
  6. 返回master,创建一个新的提交以恢复该行文本,并添加其他更改
  7. 返回测试,运行git merge master
  8. 请注意,合并自动删除了该行文本(!!!(,但保留了其他更改。我希望合并不会删除该行,以便它与master匹配

我在github上上传了我的结果:https://github.com/terryttsai/testRevertMerge/commits/test

如果我从未在test分支中精心选择过该提交,那么git merge master确实保留了这行文本。那么,为什么当我真的进行了樱桃选择提交时,合并会将其删除呢?我如何从一开始就防止这种情况发生?

我希望合并不会删除那一行,这样它就会匹配master。

否。git merge master并不意味着匹配master!

什么合并?合并意味着从分歧点开始计算

两个分支的贡献分歧点在第一行加上之后。那么之后每个分支上发生了什么?

  • 在大师身上,唯一的贡献就是额外的东西。(它删除了第一行,但后来恢复了它,所以这不是一个贡献;在这方面,什么都没有发生。(

  • 在测试中,唯一的贡献是删除第一行(这就是精心挑选的reverse-commit所做的(。

所以合并同时执行这两个操作:从master中删除多余的行,从test中删除。

但是,如果你从不进行樱桃采摘,那么两个分支都不会删除那一行,所以很明显,合并不会删除它。

最新更新