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

时间:2016-03-11 13:03:19

标签: 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

回购现在看起来像这样:

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)?

注意:这个问题使用空格和预提交挂钩作为示例,但更常见的是适用于任何情况,当你有一些文件被暂存时,有些则没有,有些重叠。

2 个答案:

答案 0 :(得分:3)

这个怎么样?

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

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

答案 1 :(得分:1)

class TestComponent(Component):

  def __init__(self, *args, **kw):
      super().__init__(*args, **kw)

      @listen_on('test')
      def on_test(self, event):
          print("self is " + str(self))
          print("FF" + str(event))

      self.on_test = on_test  

有两部分:

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

git diff --name-only --cached - 列出对这些文件的更改