如何列出提交中的所有文件?

时间:2009-01-08 12:26:33

标签: git git-show

我正在寻找一个简单的git命令,它提供了一个格式良好的列表,列出了哈希(SHA1)给出的提交的所有文件,没有多余的信息。

我试过了:

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

虽然它列出了文件,但它还包含每个文件的不需要的差异信息。

是否有另一个git命令只提供我想要的列表,以便我可以避免从git show输出中解析它?

31 个答案:

答案 0 :(得分:3290)

首选方式(因为它是 plumbing 命令;意味着是程序化的):

$ git diff-tree --no-commit-id --name-only -r bd61ad98
index.html
javascript/application.js
javascript/ie6.js

另一种方式(不太喜欢脚本,因为它是瓷器命令;意味着面向用户)

$ git show --pretty="" --name-only bd61ad98    
index.html
javascript/application.js
javascript/ie6.js

  • --no-commit-id会抑制提交ID输出。
  • --pretty参数指定一个空格式字符串,以避免在开头发生错误。
  • --name-only参数仅显示受影响的文件名(Thanks Hank)。
  • -r参数是递归到子树

答案 1 :(得分:208)

如果您想获取已更改文件的列表:

git diff-tree --no-commit-id --name-only -r <commit-ish>

如果要获取提交中所有文件的列表,可以使用

git ls-tree --name-only -r <commit-ish>

答案 2 :(得分:198)

我只是假设不需要gitk。在这种情况下,请尝试git show --name-only <sha>

答案 3 :(得分:156)

我个人使用 - stat - oneline show 命令的组合:

git show --stat --oneline HEAD
git show --stat --oneline b24f5fb
git show --stat --oneline HEAD^^..HEAD

如果您不喜欢/想要添加/删除统计信息,可以将 - stat 替换为 - 仅限名称

git show --name-only --oneline HEAD
git show --name-only --oneline b24f5fb
git show --name-only --oneline HEAD^^..HEAD

答案 4 :(得分:65)

最近我需要在两次提交之间列出所有已更改的文件。所以我使用了这个(也是* nix特定的)命令

git show --pretty="format:" --name-only START_COMMIT..END_COMMIT | sort | uniq

更新:或者正如Ethan在下面指出的那样

git diff --name-only START_COMMIT..END_COMMIT

使用--name-status还将包括每个文件旁边的更改(添加,修改,删除等)

git diff --name-status START_COMMIT..END_COMMIT

答案 5 :(得分:64)

您也可以

git log --name-only

您可以浏览各种提交,提交消息和更改的文件。

输入q以获得提示。

答案 6 :(得分:56)

最简单的形式:

git show --stat (hash)

这更容易记住,它会为您提供所需的所有信息。

如果您真的只想要文件的名称,可以添加--name-only选项。

git show --stat --name-only (hash)

答案 7 :(得分:47)

我经常使用更改别名。设置:

git config --global alias.changed 'show --pretty="format:" --name-only'

然后:

git changed (lists files modified in last commit)   
git changed bAda55 (lists files modified in this commit)
git changed bAda55..ff0021 (lists files modified between those commits)

可能有用的类似命令:

git log --name-status --oneline (very similar, but shows what actually happened M/C/D)
git show --name-only

答案 8 :(得分:38)

使用标准git diff命令(也适用于脚本):

git diff --name-only <sha>^ <sha>

如果您还想要更改文件的状态:

git diff --name-status <sha>^ <sha>

这适用于合并提交。

答案 9 :(得分:29)

使用

git log --name-status

这将显示提交ID,消息,已更改的文件以及是否已修改,创建,添加或删除。有点像一体化的命令。

答案 10 :(得分:24)

$ git log 88ee8^..88ee8 --name-only --pretty="format:"

答案 11 :(得分:19)

好的,有几种方法可以显示特定提交中的所有文件......

要减少已提交文件的信息和仅显示名称,您只需添加--name-only--name-status标记...,这些标记只会向您显示文件名与您之前提交的文件名不同...

所以你可以git diff后跟--name-only<sha0> <sha1>之后有两个提交哈希值,如下所示:

git diff --name-only 5f12f15 kag9f02 

我还创建了下面的图片,以显示在这些情况下要经历的所有步骤:

git diff --name-only 5f12f15 kag9f02

答案 12 :(得分:15)

我用它来获取两个变更集之间的修改文件列表:

git diff --name-status <SHA1> <SHA2> | cut -f2

答案 13 :(得分:14)

我喜欢用

git show --stat <SHA1>^..<SHA2>

答案 14 :(得分:13)

git show --name-only commitCodeHere

答案 15 :(得分:12)

还有git whatchanged,其级别低于git log

NAME
       git-whatchanged - Show logs with difference each commit introduces

它输出提交摘要及其下方的文件列表及其模式,如果添加(A),删除(D)或修改(M);

$ git whatchanged f31a441398fb7834fde24c5b0c2974182a431363

会给出类似的东西:

commit f31a441398fb7834fde24c5b0c2974182a431363
Author: xx <xx@xx.nl>
Date:   Tue Sep 29 17:23:22 2015 +0200

    added fb skd and XLForm

:000000 100644 0000000... 90a20d7... A  Pods/Bolts/Bolts/Common/BFCancellationToken.h
:000000 100644 0000000... b5006d0... A  Pods/Bolts/Bolts/Common/BFCancellationToken.m
:000000 100644 0000000... 3e7b711... A  Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h
:000000 100644 0000000... 9c8a7ae... A  Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m
:000000 100644 0000000... bd6e7a1... A  Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h
:000000 100644 0000000... 947f725... A  Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m
:000000 100644 0000000... cf7dcdf... A  Pods/Bolts/Bolts/Common/BFDefines.h
:000000 100644 0000000... 02af9ba... A  Pods/Bolts/Bolts/Common/BFExecutor.h
:000000 100644 0000000... 292e27c... A  Pods/Bolts/Bolts/Common/BFExecutor.m
:000000 100644 0000000... 827071d... A  Pods/Bolts/Bolts/Common/BFTask.h
...

我知道这个答案并没有真正匹配&#34;没有多余的信息。&#34;,但我仍然认为这个列表比文件名更有用。

答案 16 :(得分:11)

我喜欢这个:

git diff --name-status <SHA1> <SHA1>^

答案 17 :(得分:10)

如果您只想在上次提交中更改文件列表,请使用简单的一行命令:

git diff HEAD~1 --name-only

答案 18 :(得分:8)

列出提交中更改的文件:

git diff --name-only SHA1^ SHA1

这不显示日志消息,额外换行符或任何其他混乱。这适用于任何提交,而不仅仅是当前提交。不知道为什么它还没有提到相当,所以我正在添加它。

答案 19 :(得分:8)

显示日志。

COMMIT可以为空(“”)或sha-1或sha-1缩短。

git log COMMIT -1 --name-only

这将仅列出文件,对进一步处理非常有用。

git log COMMIT -1 --name-only --pretty=format:"" | grep "[^\s]"

答案 20 :(得分:7)

找到了一个完美的答案:

git show --name-status --oneline <commit-hash>

这样我才能知道

which files were just modified M

Which files were newly added , A

Which files were deleted , D

答案 21 :(得分:5)

有一个简单的技巧可以查看文件列表,只需在哈希后添加:

git show 9d3a52c474:

然后您可以钻取,

git show 9d3a52c474:someDir/someOtherDir

如果您点击文件,您将获得该文件的原始版本;如果你只是寻找一个好的参考或关键的代码片段(差异可以使一切变得一团糟),有时候你会想要它,

git show 9d3a52c474:someDir/someOtherDir/somefile

这种方法的唯一缺点是它不容易显示文件树。

答案 22 :(得分:5)

git show --stat”(感谢Ryan)和一些sed命令的组合应该为您修剪数据:

git show --stat <SHA1> | sed -n "/ [\w]\*|/p" | sed "s/|.\*$//"

这将只生成修改过的文件列表。

答案 23 :(得分:2)

git show HEAD@{0}

对我来说很好用

答案 24 :(得分:2)

尝试使用此命令输入名称并更改行数

git show --stat <commit-hash>

仅显示文件名

git show --stat --name-only  <commit-hash>

获取最后的提交哈希,然后尝试此命令

git log -1

带有显示文件名和文件状态的最后一次提交修改,创建或删除

 git log -1 --oneline --name-status

或全部

git log

答案 25 :(得分:1)

如果您使用的是oh-my-zsh和git插件,则 glg 快捷方式会很有帮助。

答案 26 :(得分:1)

我用它来获取合并提交中已更改文件的列表

(var i = 0; i=array.length; i++)

i<array.length

答案 27 :(得分:1)

列出提交树中的所有文件:

git ls-tree --name-only --full-tree a21e610

答案 28 :(得分:0)

要列出在特定提交上更改的文件:

git show --pretty=%gd --stat <commit_id>

要列出在最近提交中更改的文件:

git show --pretty=%gd --stat

答案 29 :(得分:-2)

我以为我会分享我的别名摘要..我也发现使用&#39; zsh&#39;非常好用git它chroma键很好地通过更改命令提示符告诉你想要分支在所有时间。

对于那些来自SVN的人,您会发现这很有用:(这是来自不同主题的想法的组合,我只知道如何使用复制/粘贴)

.gitconfig:
        ls = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative --name-status

>>git ls
* 99f21a6 - (HEAD -> swift) New Files from xcode 7 (11 hours ago) Jim Zucker| 
| A     icds.xcodeproj/project.pbxproj
| A     icds.xcodeproj/project.xcworkspace/contents.xcworkspacedata
| A     icds/AppDelegate.m
| A     icds/Assets.xcassets/AppIcon.appiconset/Contents.json

* e0a1bb6 - Move everything to old (11 hours ago) Jim Zucker| 
| D     Classes/AppInfoViewControler.h
| D     Classes/AppInfoViewControler.m
| D     Classes/CurveInstrument.h


.gitconfig: 
       lt = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative

>>git lt
* 99f21a6 - (HEAD -> swift) New Files from xcode 7 (11 hours ago) Jim Zucker
* e0a1bb6 - Move everything to old (11 hours ago) Jim Zucker
* 778bda6 - Cleanup for new project (11 hours ago) Jim Zucker
* 7373b5e - clean up files from old version (11 hours ago) Jim Zucker
* 14a8d53 - (tag: 1.x, origin/swift, origin/master, master) Initial Commit (16 hours ago) Jim Zucker


.gitconfig
lt = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative

>> git lt

commit 99f21a61de832bad7b2bdb74066a08cac3d0bf3c
Author: Jim Zucker <jim@stratengllc.com>
Date:   Tue Dec 1 22:23:10 2015 -0800

    New Files from xcode 7

A       icds.xcodeproj/project.pbxproj
A       icds.xcodeproj/project.xcworkspace/contents.xcworkspacedata


commit e0a1bb6b59ed6a4f9147e894d7f7fe00283fce8d
Author: Jim Zucker <jim@stratengllc.com>
Date:   Tue Dec 1 22:17:00 2015 -0800

    Move everything to old

D       Classes/AppInfoViewControler.h
D       Classes/AppInfoViewControler.m
D       Classes/CurveInstrument.h
D       Classes/CurveInstrument.m

答案 30 :(得分:-3)

这应该有效:

git status

这将显示未上演的内容和上演的内容。