git:显示两个提交之间更改的所有文件

git上的即席:显示两个提交之间的所有更改的文件 :我想要列出所有在两次提交之间已经更改的文件,即使它们现在是相同的(即已更改,然后再更改)。

这是我能想到的最好的:

git log --name-only --pretty=oneline --full-index HEAD^^..HEAD | grep -vE '^[0-9a-f]{40} ' | sort | uniq 

将HEAD ^^和HEADreplace为要比较的提交。

我尝试使用git log--name-only列出指定的每个提交之间的所有文件。 --pretty=oneline使文件列表上方的部分仅包含提交SHA和消息标题。 --full-index使SHA成为完整的40个字符。 grep过滤掉任何看起来像SHA的东西,然后是空格。 除非您的文件以SHA开头,后面跟着一个空格,否则结果应该是正确的。

我认为这个命令是你的答案:

 git diff --stat abc123 xyz123 #where abc123 and xyz123 are SHA1 hashes of commit objects 

直接从git社区书

如果你不想看到整个补丁,你可以添加'–stat'选项,这个选项会将输出限制在已经改变的文件中,同时用一些文本graphics描述每个文件中有多less行改变。

如果只想看到提交b按时间顺序排列的文件名,

 git diff <a commit sha1>...<b commit sha2> --name-only # b is after a in time 

如果你想查看所有的文件名,以及从提交a到提交b的内容,然后删除最后一个参数。

 git diff <a commit sha1>...<b commit sha2> # shows file names and what changed in each file 

一个<commit sha1>的例子是提交id的例如675ee6860d2c273bcc6c6a0536634a107e2a3d9f 。 一般情况下,前8-10位数字在大多数项目中都可以使用,但是如果项目有提交的话,可能需要更多的数字。 通常我使用从git log --oneline的id的输出。

当你得到a和b之间的差异时,很容易看到每个文件按时间顺序变化的情况。

这个和igorw类似,但是它避免了通过grep去除SHA:

 git log --pretty='format:' --name-only HEAD^^..HEAD | sort -u 

如果您还想查看文件是如何修改的,请将--name-onlyreplace为--name-status

我会用; 采取提交散列的前8个。 如果你想要的话,你可以按照下面的方法将文件导入到文件中:

 git log 12345678..87654321 > C:\GitChanges.txt