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

gen*_*ene 27 git file commit status

有什么方法可以获取我输入以下内容时将提交的文件列表吗?

git commit -m "my changes"
Run Code Online (Sandbox Code Playgroud)

git status列出太多了.我可以删除所有的单词,但我宁愿不.而且我不想被告知未跟踪的文件.

我试过了

git ls-files -md
Run Code Online (Sandbox Code Playgroud)

但是这并没有显示最近添加但尚未提交的文件.

我正在寻找你得到的相同输出

svn status -q
Run Code Online (Sandbox Code Playgroud)

例如$ svn status -q
一个file.py
M dir/database.py
M start.py

gen*_*ene 32

这就是我想要的.感谢notnoop领导我需要的.我想回复我的解决方案以防其他人帮助我.

git diff HEAD  --name-only
Run Code Online (Sandbox Code Playgroud)

既然我打算做

git commit -s -F mesage.txt
Run Code Online (Sandbox Code Playgroud)

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

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

  • 你不的意思是`git diff --cached --name-only`?`diff HEAD`将显示上次提交但未推送的文件.`--cached`将显示运行`git commit`时将提交的文件 (2认同)
  • `git diff --staged --name-only`也有效.根据您对git的看法,您可能希望使用--staged [synonym](/sf/answers/2791452751/)而不是--cached. (2认同)

CB *_*ley 9

此命令将告诉您索引/缓存/暂存区域中的哪些文件与当前HEAD(以及它们是添加,修改还是删除)不同,这些更改将在git commit没有显式路径或-a选项的情况下使用.它的格式与svn status您显示的输出相似.

git diff --cached --name-status
Run Code Online (Sandbox Code Playgroud)


not*_*oop 5

你可以试试:

git diff --name-status
Run Code Online (Sandbox Code Playgroud)

我得到以下内容:

$ git diff --name-status
M       README.markdown
Run Code Online (Sandbox Code Playgroud)

没有未跟踪的文件.

  • 这是不正确的.问题是,"当我说'git commit -m message`"时会提交什么.这给出了工作树和缓存之间的差异,这些差异更接近于*将不会被提交. (3认同)

Mur*_*ger 5

我知道 OP 原先要求避免git status,但我觉得留给后代(即不同意 OP 保留意见的其他人)会很好。

git status --porcelain | grep -v '^[ |??]' | sed -e 's/[A-Z] *//'
Run Code Online (Sandbox Code Playgroud)

我的理由是,它git status --porcelain似乎就是为这种窘境而构建的......

来源:http : //git-scm.com/docs/git-status.html

编辑:sed -e 's/[A-Z] *//'如果您希望在每个文件名前保留 git 的修改标签,您可以选择不使用。