git - 如何审查 merge 提交以检测不正确的大块头

标签 git merge git-merge

通常在审查 merge 提交时,我们会做 git diff-tree --cc <commit> (或简称为 git show <commit> ),但我面临以下问题:

假设你 merge B进入A在解决冲突期间,您需要从 A 中选择一个帅哥或 B分支来解决它。比方说 A 中的帅哥取代了 B 中的帅哥出于某种原因,但由于您可能不知道它并仅通过例如判断提交日期,你从 B 中选择 hunk分支机构。

如果除此之外你没有做其他修改,多父差异通过git show不会显示任何差异输出,因为生成的 block 完整地包含在其中一个父提交中。

进一步详细说明,如果您有此冲突:

<<<<<<< HEAD
aaa
=======
bbb
>>>>>>> b

并删除 aaa hunk 并选择 bbb ,反之亦然,git show <merge_commit>根本不会显示任何内容,因此您无法看到在 merge 过程中选择了什么大块头。

这可能会导致难以发现的回归。

我如何才能看到在解决冲突期间选择了哪些帅哥?

编辑:我所追求的是只查看发生冲突的帅哥(因此不会自动 merge )。

最佳答案

Edit: what I'm after is to view just the hunks that were conflicted (thus not auto-merged).

不是您要找的答案:git 命令无法做到这一点。 git 不会跟踪 merge 是如何以任何方式或方式解决的(git rerere 缓存除外,尽管它在这里对我们没有帮助)。您可能需要类似于“4 向差异”(A、B、公共(public)父级和 merge 结果)之类的东西,这是我从未听说过的。

理论上,您可以返回并自己编写一个程序,重新执行原始的 3 向 merge 以生成中间文件(带有冲突标记)并将 that 与 merge 结果进行比较. git 没有为你做这些的规定。

编辑:提到了 git rerere,尽管它在这里没有帮助。

关于git - 如何审查 merge 提交以检测不正确的大块头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39269532/

相关文章:

java - 在 IntelliJ Idea 中删除 .orig 文件

Java合并排序错误?继续获取输入值?

git - 错误计数 git 提交

git 忽略异常不按预期工作

git - 处理git blame的全部内容

svn - git-svn 是否处理移动的文件

git-merge - 不能将 `git mergetool` 与 `git am` 或 `git apply` 或 `patch` 一起使用

git - 如何修改 Git 中的多个提交以更改作者

c# - 在 C# 中将多个文件合并到一个文件中最快的方法是什么?

git - 在 Git 中重新 merge merge 的树