我在存储库中有一堆提交。我想看到两次提交之间更改的文件列表-从SHA1到SHA2。

我应该使用什么命令?


当前回答

如果有人正在查找已更改文件的列表,包括暂存文件

git diff HEAD --name-only --relative --diff-filter=AMCR

git diff HEAD --name-only --relative --diff-filter=AMCR sha-1 sha-2

如果需要绝对路径,请删除--relative。

其他回答

将以下别名添加到~/.bash_profile文件中,然后运行source~/.bah_profile;现在,您随时需要从git存储库中查看上次提交、运行和显示文件中的更新文件。

alias showfiles='git show --pretty="format:" --name-only'
git diff --name-status [SHA1 [SHA2]]

类似于--name,只是你得到一个简单的前缀,告诉你文件发生了什么(修改、删除、添加…)

git log --name-status --oneline [SHA1..SHA2]

类似,但提交列在提交消息之后,因此您可以看到文件何时更改。

如果您对某些文件/文件夹发生的情况感兴趣,可以在git日志版本中添加--<filename>[<filename>…]。如果您想查看一次提交发生了什么,请将其称为SHA1,然后执行git log--名称状态--单行[SHA1^..SHA1]

文件状态标志:

Flag Name Meaning
M modified File has been modified
C copy-edit File has been copied and modified
R rename-edit File has been renamed and modified
A added File has been added
D deleted File has been deleted
U unmerged File has conflicts after a merge

为了补充@artfurobot的答案,如果您想在两个分支之间显示更改的文件:

git diff --name-status mybranch..myotherbranch

注意优先顺序。如果您先放置较新的分支,那么它将显示文件已删除而不是已添加。

添加grep可以进一步细化:

git diff --name-status mybranch..myotherbranch | grep "A\t"

然后将只显示myotherbranch中添加的文件。

基于gitdiff-name状态,我编写了gitdiffviewGit扩展,该扩展呈现了两个路径之间变化的层次树视图。

这将显示文件中的更改:

git diff --word-diff SHA1 SHA2