git cherry:如何通过提交消息识别等效提交

时间:2017-07-30 04:21:56

标签: git version-control git-cherry

在我的项目中有一个stable分支和一个dev分支。提交是从dev分支到stable分支的挑选。

为了过滤dev上尚未合并到stable的所有提交,git cherry -v stable dev看起来是个不错的选择。然而,它通过diff来识别等价,这通常在解决cherry-pick期间的合并冲突后发生变化:

  

在删除空格后,等价测试基于diff   和行号。因此git-cherry会检测提交的时间   "复制"通过git-cherry-pick(1),git-am(1)或git-rebase(1)。

我想知道是否有任何类似git cherry的命令,但通过提交消息识别等效提交?

3 个答案:

答案 0 :(得分:1)

似乎没有直接的方法可以做到这一点,所以我写了一个简短的脚本:

#!/bin/bash
git cherry -v stable dev | grep + | cut -d ' ' -f 3- > /tmp/unmerged
xargs -a /tmp/unmerged  -I{} git --no-pager log stable --pretty=oneline --grep {} | cut -d ' ' -f 2- > /tmp/cherry-picked
diff /tmp/unmerged /tmp/cherry-picked

<强>解释

git cherry -v stable dev | grep + | cut -d ' ' -f 3- > /tmp/unmerged 写入仅存在于dev分支上的提交的提交消息。这些提交包括那些已被挑选并更改为stable分支的提交,我们需要在下一步中过滤掉这些提交。

xargs -a /tmp/unmerged -I{} git --no-pager log stable --pretty=oneline --grep {} | cut -d ' ' -f 2- > /tmp/cherry-picked输出来自(1)的提交消息,该消息在stable上显示相同的消息。换句话说,/tmp/cherry-picked会存储所有被提取并从dev更改为stable的提交。

最后,diff /tmp/unmerged /tmp/cherry-picked给出dev上的所有提交,其中stable上没有找到具有相同提交消息的提交。

答案 1 :(得分:0)

如果dev中的提交没有重新定位,那么您可以使用git cherry-pick -x,明确标记来源。没有自动使用这些信息,但有一些bash fu可以使用它。

答案 2 :(得分:0)

您想使用patch-id。这是git cherry使用的机制。

要查找等效的提交3642151,请运行:

git show 3642151 | git patch-id

你应该得到一条有两个哈希的线;第一个是补丁(电话 它PATCHID_FROM_ABOVE

git log -p | git patch-id | grep PATCHID_FROM_ABOVE

这应该为您提供与该patchid对应的所有提交的列表。

被盗:http://git.661346.n2.nabble.com/git-cherry-to-find-equivalent-commit-IDs-td3440883.html