【发布时间】:2011-03-09 20:21:48
【问题描述】:
git: show all changed files between two commits 的重复:我想要列出在两次提交之间已更改的所有文件,即使它们现在相同(即,更改然后又更改回来)。
【问题讨论】:
标签: git
git: show all changed files between two commits 的重复:我想要列出在两次提交之间已更改的所有文件,即使它们现在相同(即,更改然后又更改回来)。
【问题讨论】:
标签: git
我认为这个命令就是你的答案:
git diff --stat abc123 xyz123 # where abc123 and xyz123 are SHA1 hashes of commit objects
直接来自git community book:
如果您不想查看整个补丁,可以添加“--stat”选项,它将输出限制为已更改的文件以及一个小文本图,描述每个文件中更改了多少行文件。
【讨论】:
git diff --stat <commit1> <commit2>。
git diff --stat HEAD^^ HEAD 将为您提供空白输出。
git diff --name-only 可能比git diff --stat 好,但正如所指出的git diff 并没有做OP 想要的。
我使用这个命令来比较两次提交之间的所有更改:
git difftool -d <commit hash1> <commit hash2>
像 git rebase 一样将所有本地提交压缩为一个。
【讨论】:
我会使用;取提交哈希的前 8 个。如果您愿意,可以按照以下方式通过管道输入文件:
git log 12345678..87654321 > C:\GitChanges.txt
【讨论】:
如果只想查看提交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 在时间上晚于 a 的差异时,很容易按时间顺序查看每个文件中的更改内容。
【讨论】:
这个类似于igorw的,但它避免了通过grep删除SHA:
git log --pretty='format:' --name-only HEAD^^..HEAD | sort -u
如果您还想查看文件是如何修改的,请将--name-only 替换为--name-status。
【讨论】:
"$@" 中的修订范围?否则,它将显示现有的更改,这很多:-) 我已经修改了我的答案以使用示例,就像在其他答案中一样。
git-showfiles 脚本中有这一行,"$@" 插入所有传递的参数;虽然有点晦涩(就像在 shell 脚本中一样),但这是非常标准的东西。
这是我能想到的最好的:
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 开头后跟一个空格,否则结果应该是准确的。
【讨论】: