【问题标题】:Show files that are in Git's index and changed in the working copy显示在 Git 索引中并在工作副本中更改的文件
【发布时间】:2016-03-11 13:03:19
【问题描述】:

我有一个 Git 预提交钩子,它去除空格并将修改后的文件留在工作副本中,这样它就不会像 git add -p 这样的部分添加。

如果我提交了许多已更改文件中的一个,并更正了空白,则我在工作副本中更改了两个文件和一个暂存文件(它也在工作副本中,但暂存更改有空白错误):

vi fileWithBadWS.txt  # leave bad whitespace
vi fileWithGoodWS.txt # don't leave bad whitespace
vi unrelatedFile.txt

git add fileWithBadWS.txt fileWithGoodWS.txt 
git commit -m "Commited files, one with bad whitespace" # pre-commit hook fails

回购现在看起来像这样:

On branch master
Changes to be committed:

        modified:   fileWithBadWS.txt  # bad WS
        modified:   fileWithGoodWS.txt

Changes not staged for commit:

        modified:   fileWithBadWS.txt   # fixed WS
        modified:   unrelatedFile.txt                                 

我可以使用:

  • git diff 看到 fileWithBadWS.txtunrelatedFile.txt
  • git diff --cached 查看暂存文件 fileWithBadWS.txtfileWithGoodWS

我如何只看到在工作副本中修改和暂存的文件(即仅fileWithBadWS.txt)?

注意:这个问题以空格和预提交钩子为例,但更普遍地适用于任何情况,当您有一些文件暂存而一些没有,有一些重叠。

【问题讨论】:

    标签: git git-diff pre-commit-hook git-index


    【解决方案1】:

    这个怎么样?

    git diff --name-only --staged | xargs git diff --name-only

    这将显示在工作树中暂存和更改的文件。

    【讨论】:

    • 对于不寻常的文件名git diff --name-only --staged -z | xargs -0 git diff --name-only 会更好。
    【解决方案2】:
    git diff `git diff --name-only --cached`
    

    有两部分:

    git diff --name-only --cached - 获取暂存文件的文件名

    git diff file_list - 列出这些文件的更改

    【讨论】:

      猜你喜欢
      • 2010-10-16
      • 2011-04-18
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 2014-05-12
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多