在我的项目中有一个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
的命令,但通过提交消息识别等效提交?
答案 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