如何找到提交到Git分支的文件列表?

39

我如何列出我提交到特定分支的所有文件?我已经向一个分支提交了大约40个文件,我需要找到文件名,因为我正在尝试调试一些东西,如果我不记得文件名就很难做。

git log 只给我一个长长的提交列表,但没有实际的文件。

9个回答

42

你尝试过使用git ls-tree吗?

git ls-tree --name-only -r <branch_name> 

--name-only选项只会返回文件名。 -r选项会递归进入子目录。

如果你想在递归进入子目录之前列出子目录的名称,请将-t选项添加到参数列表中。


1
很棒的回答。你回答的问题并不是显而易见的,我确实知道git log。 - octopusgrabbus
4
我的分支列出了大量文件,而不仅仅是少数文件。使用命令git log --name-only可以查看在该分支中提交所修改的文件,这似乎是一个合适的答案。 - Eugene
@Eugene:打负分有点过分了,你不觉得吗? - Carl
1
@Carl 因为?我认为那个答案是错误的,提供的解决方案也不起作用,我应该点赞吗?我已经给下面的答案点赞了。这两个箭头的目的是勾勒出最适合大多数用户的最佳解决方案。 - Eugene
太好了!谢谢!正是我想要的。 - 5lb Bass
2
使用命令 git ls-tree --name-only $branch $directory/ 可以列出特定目录下的文件列表。 - Hashbrown

23

git log --name-only 对我有用。


1
这是唯一一个似乎真正回答了问题的答案。谢谢! - SMBiggs
这应该是批准的答案。 - simpson
运行此命令后,我们无法退出,因此在 https://dev59.com/u2kx5IYBdhLWcg3wCP6Y 上找到了解决方法。 - Code_S
运行这个命令后,我们无法退出,所以找到了https://stackoverflow.com/questions/9483757/how-to-exit-git-log-or-git-diff。 - undefined

22
如果你的分支是从master衍生出来的,你可以使用这个命令列出在分支后添加的所有新文件:
git diff master...new-branch --name-status --diff-filter=A

--diff-filter可用的过滤器有:

Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R)

如果你期望得到帮助,你应该提供更多的信息。你是否得到了错误的输出?你是否遇到了错误? - KL-7
1
这对我很有效。我创建了一个分支,进行了一些提交,并只寻找修改过的文件。ls-tree解决方案给了我初始检出中的所有文件 - 不知道为什么 - 但这个方法只给了我新分支中修改过的文件。非常感谢!! - corl
非常好!也可以在不同的远程之间使用:git diff upstream/master...my-branch --name-status - undefined

12

git ls-files 命令列出当前分支上最新提交中存在的所有文件。

或者,您可以使用 git diff --name-only 显示任意两个提交之间不同的文件列表。


8

git log --name-status 命令会列出每个提交中变更文件的名称和状态。


你的意思是分支名称吗? - iCodeLikeImDrunk
完美的答案,太棒了。 - Ijaz Ahmad

2

git log --name-only 对我很有用。


0

如果您想知道自从分支以来所有不同的修改文件,这个命令可能会有用:

git log --name-status develop...branchname | grep -E "^[AMD]\s" | sort -u

而这个变体将列出您修改的子集:

git log --name-status develop...branchname --author= | grep -E "^[AMD]\s" | sort -u


-1

尝试使用smartgit。它是Git的GUI客户端。它具有非常有用的用户界面,并且对非商业用途免费。


1
这并没有直接回答他的问题,但是这些信息很有用。谢谢。 - octopusgrabbus
那么,你如何使用SmartGit查看已提交的文件呢?这实际上会回答这个问题。 - SMBiggs
@Scott Biggs,请使用 ctrl+L 查看存储库、文件夹或文件的日志。在日志窗口中选择两个提交,以查看它们之间的差异,包括文件列表和比较面板。 - kyb

-2
git diff development...crmq-2405 --name-status --diff-filter=A

将列出所有已添加到新分支中但不在邮件中的文件 - 在本例中为development主分支。

git diff development...crmq-2405 --name-status

该变量将显示新分支中的所有文件。
通用格式:
git diff main_branch...new_branch --name-status

是的,顺序很重要。


我认为这个被踩的原因是参数实际上是反过来的。我在 development…base 中没有得到任何结果,但是 git diff base..development --name-status --diff-filter=A 列出了我的开发分支中的四个新文件。 - cbowns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接