如何在git中的post-checkout钩子中找出哪些文件发生了变化?

时间:2017-06-08 05:41:16

标签: git githooks

我只是git的新手,我正在看结账后挂钩 据我了解,以下命令将从最新的提交中恢复“filename”:

git checkout -- filename

当我在结账后获得控制权时,我得到3个参数,即2个SHA和一个类型 两个SHA都是相同的,即最后一次提交的SHA和类型的值为0,这意味着发生了文件签出。
但是我要找出哪个文件已经检出?

1 个答案:

答案 0 :(得分:1)

The documentation说:

  

钩子有三个参数:

     
      
  • 前一个HEAD的参考,
  •   
  • 新HEAD的参考(可能已经或可能没有改变)和
  •   
  • 一个标志,指示结帐是分支结账(更改分支,flag=1)还是文件结帐(从索引flag=0检索文件)。
  •   

在您的情况下,您的HEAD没有改变。您可能会将一些已修改的文件初始化为HEAD内容,但除此之外,all files already checked out are still checked out

git show --pretty="" --name-only HEAD

由于您没有更改分支,因此即使已检出所有文件,该标志也会设置为0。因此,没有简单的方法可以查看哪些被修改并重置为HEAD内容。

关键是:结账后挂钩不会影响'git checkout'的结果 换句话说,索引和工作树已经反映了它们的最终状态(并且不记得以前的状态)

如果您需要按git checkout .重置文件列表,最好先执行git stash
然后git checkout:您的结帐后挂钩可以use git stash show,以便列出结帐前存在的文件。