【问题标题】:How do I list just the files that would be committed?如何仅列出将提交的文件?
【发布时间】:2010-12-21 07:59:38
【问题描述】:

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

git commit -m "my changes"

git status 列表太多。我可以去掉所有的词,但我宁愿不这样做。而且我不想被告知未跟踪的文件。

我试过了

git ls-files -md

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

我正在寻找与您相同的输出

svn status -q

例如 $ svn 状态 -q
一个文件.py
M dir/database.py
M start.py

【问题讨论】:

    标签: git file commit status


    【解决方案1】:

    你可以试试:

    git diff --name-status
    

    我得到以下信息:

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

    没有未跟踪的文件。

    【讨论】:

    • 这是不正确的。问题是,“当我说git commit -m message 时会发生什么”。这给出了工作树和缓存之间的差异,后者更接近于不会提交的内容。
    【解决方案2】:

    这就是我要找的。感谢 notnoop 提供了我需要的线索。我想发回我的解决方案,以防它帮助其他人。

    git diff HEAD  --name-only
    

    因为我打算这样做

    git commit -s -F mesage.txt
    

    在第一行找到的文件。

    我的目的是创建一个完全忽略索引的小系统,即我永远不需要执行 git add。 (据我了解,索引在创建补丁时很有用,这绝不是我工作流程中的常态。)

    【讨论】:

    • 你不是说git diff --cached --name-only吗? diff HEAD 将显示最后提交但未推送的文件。 --cached 将显示运行 git commit 时将提交的文件
    • git diff --staged --name-only 也可以。根据您对 git 的看法,您可能希望使用 --staged synonym 而不是 --cached。
    【解决方案3】:

    此命令将告诉您索引/缓存/暂存区域中的哪些文件与当前 HEAD 不同(以及它们是否是添加、修改或删除)如果您使用 git commit 而不显式地提交哪些更改路径或-a 选项。它的格式与您显示的svn status 输出相当相似。

    git diff --cached --name-status
    

    【讨论】:

      【解决方案4】:

      我知道 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。我同意 git status --porcelain 可以在脚本中使用。我在stackoverflow.com/a/6978402/6309 中记录了很多内容,并说“新选项 [--porcelain] 使命令的本机输出格式可以发出更容易被 Porcelain 处理的输出。”
      • 这似乎没有列出将在 git push 期间推送的实际文件(并且已由 git add/commmit 暂存)
      猜你喜欢
      • 1970-01-01
      • 2019-08-13
      • 2021-10-08
      • 2010-12-05
      • 1970-01-01
      • 2014-10-04
      相关资源
      最近更新 更多