如何列出仅将提交的文件?

43
有没有办法在我输入以下命令时获取将被提交的文件列表?
git commit -m "my changes"

git status 列出太多的信息。我可以剔除所有文字,但我不想这样做。而且我不想看到未跟踪的文件的提示。

我尝试过

git ls-files -md

但是这并不显示最近添加但还未提交的文件。

我正在寻找与下面命令相同的输出:

svn status -q
例如: $ svn status -q
A file.py
M dir/database.py
M start.py
5个回答

54

这就是我一直在寻找的。感谢notnoop提供了我所需要的线索。我想要分享我的解决方案,以便帮助其他人。

git diff HEAD  --name-only

因为我的意图是做...

git commit -s -F mesage.txt

使用第一行中找到的文件。

我的意图是创建一个小系统,完全忽略索引,即我永远不需要进行git add操作。(据我所知,在我的工作流程中创建补丁时索引是有用的,但这绝不是常规操作。)


6
你的意思是不是 git diff --cached --name-only?而 diff HEAD 会显示上次提交但未推送的文件。而 --cached 则会显示在运行 git commit 后将要提交的文件。 - gcb
5
git diff --staged --name-only 也可行。根据你对git的理解,你可能想使用 --staged 来代替 --cached - SpeedCoder5

15

这个命令可以告诉你在你的索引/缓存/暂存区与当前 HEAD 相比有哪些文件有所不同(它们是添加、修改还是删除),如果你使用git commit而没有明确指定路径或使用了 -a选项,那么这些变化就会被提交。输出结果的格式与你展示的svn status输出结果相似。

git diff --cached --name-status

6

我知道OP原本要求避免使用git status,但是我觉得留下这个方法对于日后的读者(即那些不像OP一样有保留意见的人)会很有帮助。

git status --porcelain | grep -v '^[ |??]' | sed -e 's/[A-Z] *//'

我的推理是git status --porcelain看起来就是为这种困境而建立的...
来源: http://git-scm.com/docs/git-status.html 编辑: 如果你想保留git修改标记在每个文件名前面,可以选择不使用sed -e 's/[A-Z] *//'

1
+1. 我同意 git status --porcelain 可以在脚本中使用。我已经在 https://dev59.com/r2w05IYBdhLWcg3w3lkl#6978402 中记录了这一点,说“新选项 [--porcelain] 使命令的本机输出格式发出更容易由 Porcelain 处理的输出。” - VonC
1
这似乎没有列出在 git push 期间将被推送的实际文件(已经通过 git add/commit 进行了暂存)。 - Paul

6
你可以尝试以下方法:
git diff --name-status

我得到了以下内容:
$ git diff --name-status
M       README.markdown

没有未跟踪的文件。

6
这不正确。问题是,“当我说git commit -m message时会提交什么”。这会显示工作树和缓存之间的差异,更接近于将不会被提交的内容。 - CB Bailey

0

我发现这个命令很有用:git diff HEAD --compact-summary

根据文档:https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---compact-summary

输出扩展头信息的简化摘要,例如文件创建或删除("new"或"gone",如果是符号链接,则为"+l"),以及diffstat中的模式更改(对于添加或删除可执行位分别为"+x"或"-x")。 信息放置在文件名部分和图形部分之间。暗示--stat。

这似乎非常接近问题中提到的svn示例。


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