我如何找到两个git提交之间的交集?

也就是说,我有兴趣找到在两次提交中都修改过的文件(或者如果更容易的话,可以用两个差异文件)。 不好意思,如果这很简单,但我对git仍然很陌生。


更新

在@PaulHicks( git diff而不是git diff-tree ...感谢Paul)的输入之后并绕过这里描述的错误ie | sort 这里| sort我的更新答案:

comm -12 <(git diff --no-commit-id --name-only -r 3fe29472016343 | sort) <(git diff --no-commit-id --name-only -r 9fd796b1998bb7d5 | sort)

老答案我不相信有一个开箱即用的命令来做你想做的事情。 但是,如果你在* nix平台上,你可以试试这个:

comm -12  <(git diff-tree --no-commit-id --name-only -r COMMIT1SHA1key) <(git diff-tree --no-commit-id --name-only -r COMMIT2SHA1key)

不幸的是我从窗口框打字:( ..hence不能检查这一马上(我必须回家尝试)

我的想法是git diff-tree会产生一个像这里一样的文件列表。

这个链接显示了这个comm -12如何在ls

编织两者都可能是我的猜测


您可以使用git diff --name-only sha1^ sha1获取单个提交中更改的文件列表。 所以你可以在一个以两个提交SHA-1作为参数的脚本中执行此操作:

git diff --name-only $1^ $1 | sort > file1
git diff --name-only $2^ $2 | sort > file2
comm -12 file1 file2
rm file1 file2

或者,如果您在linux / unix上使用bash,则可以使用@ Vikram答案中的妙用来避免临时文件:

comm -12 < (git diff --name-only $1^ $1) < (git diff --name-only $2^ $2)
链接地址: http://www.djcxy.com/p/26663.html

上一篇: How do I find intersections between two git commits?

下一篇: How to Gerrit Trigger builds only for a certain part of the project