如何使用Git的Checkout命令撤销本地未提交的代码修改?
- 内容介绍
- 文章标签
- 相关推荐
本文共计977个文字,预计阅读时间需要4分钟。
在Git 2.23版本中,`git checkout`已被标记为过时,官方推荐使用`git restore`来替代。然而,许多团队仍在使用旧版Git,且`git checkout`在处理未暂存的(unstaged)文件时可能会产生误操作——它不会提示确认,直接覆盖工作区文件内容。
执行 git checkout -- <file> 会把该文件恢复到 HEAD 版本(即最近一次 commit 的状态),所有本地编辑、新增行、删减都会被清空,且无法通过 git reflog 恢复(因为没产生新引用)。
- 只对已跟踪(tracked)文件生效;对
git status显示为Untracked files:的新文件无效 - 如果文件有暂存(staged)修改,
git checkout -- <file>会同时丢弃暂存区和工作区改动 - 路径必须存在,否则报错:
error: pathspec 'xxx' did not match any file(s) known to git
撤销单个文件用 git checkout -- filename
这是最常见也最容易出错的操作场景:改了一个配置文件,想退回上一版,但忘了自己刚加了三行调试日志。
本文共计977个文字,预计阅读时间需要4分钟。
在Git 2.23版本中,`git checkout`已被标记为过时,官方推荐使用`git restore`来替代。然而,许多团队仍在使用旧版Git,且`git checkout`在处理未暂存的(unstaged)文件时可能会产生误操作——它不会提示确认,直接覆盖工作区文件内容。
执行 git checkout -- <file> 会把该文件恢复到 HEAD 版本(即最近一次 commit 的状态),所有本地编辑、新增行、删减都会被清空,且无法通过 git reflog 恢复(因为没产生新引用)。
- 只对已跟踪(tracked)文件生效;对
git status显示为Untracked files:的新文件无效 - 如果文件有暂存(staged)修改,
git checkout -- <file>会同时丢弃暂存区和工作区改动 - 路径必须存在,否则报错:
error: pathspec 'xxx' did not match any file(s) known to git
撤销单个文件用 git checkout -- filename
这是最常见也最容易出错的操作场景:改了一个配置文件,想退回上一版,但忘了自己刚加了三行调试日志。

