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

And*_*rew 63 git

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

igo*_*orw 70

这是我能想到的最好的:

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

将HEAD ^^和HEAD替换为您要比较的提交.

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

  • 绝对尴尬.我不得不在提交SHA之间放置3个点(如图所示不是2)以使其工作.我认为Bryce的答案更简单(即在git diff命令上使用--stat)并且它提供了更多信息(更改的文件数量加上每个文件中更改的行数). (2认同)

bry*_*mcd 46

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

git diff --stat abc123 xyz123  #where abc123 and xyz123 are SHA1 hashes of commit objects
Run Code Online (Sandbox Code Playgroud)

直接从git社区书籍

如果您不想看到整个补丁,可以添加'--stat'选项,这将限制输出到已更改的文件以及描述每个文件中更改了多少行的文本图.

  • 不,这不是他想要的.Git diff在树之间做直接差异,它不考虑提交.如果您创建一个内容为"A"的新文件,然后将内容更改为"B",然后将其更改回"A",`git diff --stat HEAD ^^ HEAD`将为您提供空白输出. (4认同)
  • `git diff --name-only`可能比`git diff --stat`更好,但正如指出`git diff`没有做OP想要的那样. (3认同)
  • 更具体地说,`git diff --stat <commit1> <commit2>`. (2认同)

Llo*_*ter 11

如果只想查看以下b内容按时间顺序提交的文件名a:

git diff <a commit sha1>...<b commit sha2> --name-only # b is after a in time
Run Code Online (Sandbox Code Playgroud)

如果要查看所有文件名以及从提交a到提交b的更改内容,请删除最后一个参数.

git diff <a commit sha1>...<b commit sha2> # shows file names and what changed in each file
Run Code Online (Sandbox Code Playgroud)

一个例子<commit sha1>是提交ID就像675ee6860d2c273bcc6c6a0536634a107e2a3d9f.通常,前8-10位数字适用于大多数项目,但如果项目有大量提交,可能需要更多.通常我使用id的输出git log --oneline.

当你得到a ... b和b的时间晚于时间时,可以很容易地按时间顺序查看每个文件中的更改内容.