git - 为什么 "git checkout <filename>"仅适用于非暂存文件?

标签 git git-checkout

如果我提交并更改文件 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/

相关文章:

git - 配置 `git pull` 使用 --ff 和 `git merge` 使用 --no-ff

git stash 错误 : git stash pop and ended up with merge conflicts

git - 在与 main 相同的提交上分离 HEAD?

git - 如何在 Gitlab 中成功的管道结束时创建 merge 请求?

git - LabVIEW VI 的版本控制是如何工作的?

git - 如何在 GitHub 上从 master 创建开发分支

git 在将更改推送到远程分支时说一切都是最新的

git - Git如何获取当前分支的最新标签名?

git - 为什么在提交后 Hook 中设置 GIT_WORK_TREE 不起作用?

git - 删除了对密码身份验证的支持。请改用个人访问 token