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

3npbholx  于 2023-03-16  发布在  Git
关注(0)|答案(5)|浏览(176)

当我键入以下命令时,有没有办法获得将要提交的文件列表?

git commit -m "my changes"

git status列出了太多的东西。我可以把所有的单词都去掉,但我不想这样。我也不想被告知有未跟踪的文件。
我试过了

git ls-files -md

但它不显示最近添加但尚未提交的文件。
我在寻找同样的输出

svn status -q

例如$ svn status -q
一个file.py
M目录database.py
Mstart.py

2o7dmzc5

2o7dmzc51#

这就是我一直在寻找的。感谢notnoop提供了我所需要的线索。我想把我的解决方案发回去,以防它对别人有帮助。

git diff HEAD  --name-only

因为我打算

git commit -s -F mesage.txt

与第一行中找到的文件匹配。
我的目的是创建一个完全忽略索引的小系统,也就是说,我永远不需要git add(据我所知,索引在创建补丁时很有用,但这绝不是我工作流程中的标准)。

vsaztqbk

vsaztqbk2#

这个命令会告诉你index/cache/staging区域中的哪些文件与当前HEAD不同(以及它们是添加、修改还是删除),如果你使用git commit而没有显式路径或-a选项,HEAD是将要提交的更改。它的格式与你显示的svn status输出相当相似。

git diff --cached --name-status
lxkprmvk

lxkprmvk3#

您可以尝试:

git diff --name-status

我得到了以下结果:

$ git diff --name-status
M       README.markdown

没有未追踪的文件。

cqoc49vn

cqoc49vn4#

我知道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
EDIT:如果你想在每个文件名前面保留git的修改标签,你可以选择不使用sed -e 's/[A-Z] *//'

ztyzrc3y

ztyzrc3y5#

我发现这个很有用git diff HEAD --compact-summary
来自文档:https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---compact-summary
Output a condensed summary of extended header information such as file creations or deletions ("new" or "gone", optionally "+l" if it’s a symlink) and mode changes ("+x" or "-x" for adding or removing executable bit respectively) in diffstat. The information is put between the filename part and the graph part. Implies --stat.
这看起来非常接近问题中提到的svn例子.

相关问题