如何在两个git提交之间找到交叉点?

时间:2014-02-25 21:16:08

标签: git

即,我有兴趣查找在两次提交中都被修改的文件(如果更容易,则在两个差异中)。对不起,如果它很简单,但我对git来说还是新手。

2 个答案:

答案 0 :(得分:2)

<强>更新

来自@PaulHicks的输入(git diff而不是git diff-tree ...感谢Paul)并绕过here所描述的错误,即| sort这里是我更新的答案:< / p>

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)

不幸的是我正在从Windows框中输入:( ..因此无法立即检查(我必须回家试试)

我的想法是git diff-tree将生成一个文件列表,如here

link显示了此comm -12如何在ls上运行。

编织两者可能有用是我的猜测

答案 1 :(得分:1)

您可以使用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)