git的即兴之处:显示两次提交之间所有已更改的文件:我想要列出两次提交之间已更改的所有文件,即使它们现在是相同的(即先更改后又变回)。
git的即兴之处:显示两次提交之间所有已更改的文件:我想要列出两次提交之间已更改的所有文件,即使它们现在是相同的(即先更改后又变回)。
Answers:
这是我能想到的最好的方法:
git log --name-only --pretty=oneline --full-index HEAD^^..HEAD | grep -vE '^[0-9a-f]{40} ' | sort | uniq
用要比较的提交替换HEAD ^^和HEAD。
我的尝试使用git logwith--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”选项,该选项将输出限制为已更改的文件,以及一个小的文本图,该图描述了每个文件中更改了多少行。
git diff --stat <commit1> <commit2>。
git diff --stat HEAD^^ HEAD将为您提供空白输出。
git diff --name-only可能比更好,git diff --stat但正如指出的那样git diff,OP并没有做到。
如果仅想查看b按时间顺序在其后提交的文件名a:
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的一个示例是like 675ee6860d2c273bcc6c6a0536634a107e2a3d9f。通常,前8到10位数字可用于大多数项目,但如果项目有很多提交,则可能需要更多。通常,我使用id的输出git log --oneline。
当您得到a ... b的差异,并且b在时间上晚于a时,很容易按时间顺序查看每个文件中的更改。
这类似于igorw的,但是它避免了通过grep以下方式删除SHA :
git log --pretty='format:' --name-only HEAD^^..HEAD | sort -u
如果您还想查看文件的修改方式,请替换--name-only为--name-status。
"$@"?否则,它将显示现有的更改,这是很多的:-)我已经修改了答案以使用示例,就像其他答案一样。
git-showfiles脚本中有这一行,并"$@"插入所有传递的参数;尽管有点晦涩(就像在shell脚本中一样),但这是非常标准的东西。