如果我提交并更改文件 foo
,我可以通过 git checkout foo
撤消这些更改。如果我对 foo
进行更改并使用 git add foo
添加它们,那么 git checkout foo
不会执行任何操作(并且不会说任何东西)
这背后的原因是什么?
最佳答案
当你说
git checkout foo
如果没有其他参数,您将告诉 git 将工作树中的 foo
替换为索引中的 foo
。因此,如果您已添加
(即分阶段,即更新了索引)对foo
进行的所有更改,那么当然没有什么可做的这个 checkout
命令要执行的操作。
取消更改的正常过程是首先重置
(从HEAD
提交更新索引),然后然后使用checkout
更新工作版本。
话又说回来,您可以使用checkout
从之前的提交中获取foo
的版本
git checkout HEAD foo
这也同样有效;两步方法可能只是更广为人知,因为它使用 git status 建议的命令来取消暂存和取消更改。
关于git - 为什么 "git checkout <filename>"仅适用于非暂存文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46326120/