如何找出 git 的 post-checkout 挂钩中哪些文件已更改?

GOV*_*ney 5 git githooks

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

git checkout -- filename
Run Code Online (Sandbox Code Playgroud)

当我在结帐后获得控制权时,我得到 3 个参数,即 2 个 SHA 和一个类型。
两个 SHA 是相同的,即最后一次提交和类型的 SHA 值为 0,这意味着发生了文件检出。
但是我回家能查出哪些文件被签出了吗?

Von*_*onC 1

文档说:

该钩子被赋予三个参数:

  • 前一个 HEAD 的 ref,
  • 新 HEAD 的引用(可能已更改,也可能未更改),以及
  • 指示签出是分支签出(更改分支,flag=1)还是文件签出(从索引检索文件,flag=0)的标志。

就你而言,你的 HEAD 没有改变。您可能会将一些修改后的文件初始化回 HEAD 内容,但除此之外,所有已检出的文件仍会检出

git show --pretty="" --name-only HEAD
Run Code Online (Sandbox Code Playgroud)

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


关键是:结帐后挂钩不能影响“git checkout”的结果。
换句话说,索引和工作树已经反映了它们的最终状态(并且不记得之前有什么)

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

  • 您一定想知道为什么您会收到一个指示符,显示正在检出文件,然后却没有给您找到文件名的方法。 (4认同)