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-only
replace为--name-status
。
我会用; 采取提交散列的前8个。 如果你想要的话,你可以按照下面的方法将文件导入到文件中:
git log 12345678..87654321 > C:\GitChanges.txt