如何检测git补丁是否已经应用?

7
我有几个git分支,它们之间进行了提交挑选。有时会合并提交。
为了决定是否将提交abcdef应用于live分支,我想知道是否已经将等效的提交应用于preprod分支。
如果preprod从未压缩提交,则我将使用补丁ID,如此问题中所讨论的那样。由于preprod可能会压缩提交序列,因此我想查看abcdefpreprod上是否为空提交
$ git checkout preprod
$ git cherry-pick abcdef
On branch preprod
Your branch is up-to-date with 'origin/preprod'.
You are currently cherry-picking commit abcdef.

The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git reset'

如何通过程序检测挑选提交是否会导致一个空提交?

(我知道这是一个不完美的启发式方法来检测修补程序是否已应用,但对于我的使用情况而言足够好。)


你可以从 Bash 脚本中使用 git diff 并检查结果,而不是完整地执行 cherry-pick 操作。如果 git diff 显示没有差异,则应该可以继续。 https://dev59.com/zmYr5IYBdhLWcg3wYpQg#13715727。不幸的是,压缩生产分支会改变历史记录,因此你已经清除了确定是否应用了补丁的最佳方法。我强烈建议将来不要这样做。这种做法基本上使得代码版本控制工具失去了意义。 - JDB
1个回答

4
请看 git cherry

查找尚未应用到上游的提交

如果需要执行cherry-pick,则类似下面的命令可以起到作用,显示提交abcdef,否则不会显示(未经检查):
git cherry abcdef preprod abcdef^

1
如果补丁是一个文件,我们可以从中检查吗? - alper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接