git: show all changed files between two commits上的riff:我想要列出两次提交之间已更改的所有文件,即使它们现在是相同的(即更改然后再更改)。
答案 0 :(得分:62)
这是我能想到的最好的:
git log --name-only --pretty=oneline --full-index HEAD^^..HEAD | grep -vE '^[0-9a-f]{40} ' | sort | uniq
将HEAD ^^和HEAD替换为您要比较的提交。
我的尝试使用git log
和--name-only
列出指定的每个提交之间的所有文件。 --pretty=oneline
使文件列表上方的部分仅包含提交SHA和消息标题。 --full-index
使SHA成为完整的40个字符。 grep
过滤掉任何看起来像SHA后跟空格的内容。除非您的文件以SHA开头,后跟空格,否则结果应该是准确的。
答案 1 :(得分:41)
我认为这个命令是你的答案:
git diff --stat abc123 xyz123 #where abc123 and xyz123 are SHA1 hashes of commit objects
如果您不想看到整个补丁,可以添加'--stat'选项,这将限制输出到已更改的文件以及一个描述每行更改了多少行的文本图表文件。
答案 2 :(得分:8)
如果只是想在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,如675ee6860d2c273bcc6c6a0536634a107e2a3d9f
。通常,前8-10位数字适用于大多数项目,但如果项目有大量提交,可能需要更多。通常我使用来自git log --oneline
的id的输出。
当你得到a ... b和b的时间晚于时间时,很容易看到每个文件按时间顺序发生了什么变化。
答案 3 :(得分:1)
这个类似于 igorw ,但它避免了通过grep
删除SHA:
git log --pretty='format:' --name-only HEAD^^..HEAD | sort -u
如果您还想查看文件的修改方式,请将--name-only
替换为--name-status
。
答案 4 :(得分:0)
我使用;获取提交哈希的前8个。如果您希望可以按照以下方式管道输入文件:
git log 12345678..87654321 > C:\GitChanges.txt
答案 5 :(得分:0)
我使用此命令比较两次提交之间的所有更改:
git difftool -d <commit hash1> <commit hash2>
就像git rebase一样,将所有本地提交压缩为一个。