显示 Git 索引中并在工作副本中更改的文件

Ind*_*oad 3 git git-diff pre-commit-hook git-index

我有一个 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
Run Code Online (Sandbox Code Playgroud)

仓库现在看起来像这样:

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                                 
Run Code Online (Sandbox Code Playgroud)

我可以用:

  • git diff去看fileWithBadWS.txt并且unrelatedFile.txt
  • git diff --cached查看暂存文件fileWithBadWS.txtfileWithGoodWS.

我怎样才能看到在工作副本中修改并暂存的文件(即仅fileWithBadWS.txt)?

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

Roy*_*nto 5

这个怎么样 ?

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

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