为什么git log --cherry-pick没有删除等效的提交?

Wiv*_*aro 21 git cherry-pick git-log git-cherry-pick

我一直在尝试使用

git log --no-merges --cherry-pick --right-only master...my-branch
Run Code Online (Sandbox Code Playgroud)

生成my-branch中但不在master中的提交列表(根据git-log文档).但是,列表中仍有许多等效的提交.如果我显示它们和它们的补丁,除了commit id之外没有区别.

git show 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621 >patcha
git show c53c7c32dcd84bfa7096a50b27738458e84536d5 >patchb

diff patcha patchb
1c1
< commit 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621
---
> commit c53c7c32dcd84bfa7096a50b27738458e84536d5
Run Code Online (Sandbox Code Playgroud)

甚至将git patch-id它们视为等效:

git show c53c7c32dcd84bfa7096a50b27738458e84536d5 | git patch-id
2b5504fb9a8622b4326195d88c7a20f29701e62b c53c7c32dcd84bfa7096a50b27738458e84536d5
git show 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621 | git patch-id
2b5504fb9a8622b4326195d88c7a20f29701e62b 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621
Run Code Online (Sandbox Code Playgroud)

怎么不git log --cherry-pick把这些作为重复?

Joh*_*ter 6

你做樱桃选择后,你有没有将master合并到你的分支中? --cherry-pick首先通过匹配提交ID,然后如果失败,查找修补程序ID.如果你已经将master合并到你的分支中,那么你现在可以在你的分支上获得实际的提交以及挑选出来的版本.所以它会找到提交ID,然后继续报告樱桃挑选的版本.

我经常想知道git是否应该总是检查两者,但这可能是一个相当大的性能影响.

  • Cherry挑选将始终引入新的提交ID,因为父级或时间已更改.但是如果`master`被合并到`my-branch`,那么两个版本现在都存在于分支上,因此将报告樱桃挑选的版本,因为commit id的完全匹配优先.尝试使用`git branch --contains 16cbd0e`和`git branch --contains c53c7c3`.我敢打赌,其中至少有一个显示'master`和`my-branch`.有一点需要考虑:如果你要合并一个分支,你可能不应该选择它.不仅因为这个原因,它还使历史变得混乱. (4认同)
  • 这仍然困扰着我.我们合并以保持历史的一致性,并且我们最终会采摘樱桃,因为很难强制执行这样的规则,即知道在完成工作时应该在哪里完成工作.樱桃采摘最终是不可避免的.错误首先得到修复,位置往往是事后的想法.我还在寻找一种从日志视图中删除这些重复提交的方法,如果除了编写自己的工具以查看补丁ID之外还有其他任何想法. (2认同)