git - 为什么“cherry-pick”会导致 git merge 丢弃我的部分提交?

标签 git merge cherry-pick git-cherry-pick

所以我试图理解为什么当我将 git merge master merge 到分支中时,我会丢失一些提交中的更改,但不是全部。这似乎与我的分支上的选择性提交有关。重现方法如下:

  1. 通过初始提交初始化存储库
  2. 向文件添加一行文本并提交
  3. 将其分支,称之为“测试”
  4. 在分支主机上,恢复第二次提交
  5. 精挑细选提交到测试分支
  6. 返回 master,创建一个新的提交来恢复该文本行,并添加其他更改
  7. 返回测试,运行git merge master
  8. 请注意, 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/

相关文章:

git - Jenkins 配置和安全问题

linux - NPM 安装 PM2 -g (Ubuntu 14.04 x64) 时出错

git - .gitattributes 中的 merge 策略不起作用

git - 使用干净的工作目录将 1 个提交从一个分支 (dev) 复制到另一个 (stable)

git - 如何避免获取 .repo/manifest.xml?

git 提交错误消息 : cannot open (a previously deleted source file)

git - 将 merge rebase 为从未发生过

Git cherry pick 和数据模型完整性

java - 将 2 个数组链接或合并为 1 个数组并在 java 中对它们进行排序

R 如何在具有多个多边形的 shapefile 中合并多边形要素? (可重现的代码示例)