Git 中丢弃未暂存更改的方法 技术背景 在使用 Git 进行版本控制时,我们常常会对文件进行修改。这些修改会处于不同的状态,如未暂存、已暂存和已提交。有时,我们可能需要丢弃那些还未暂存的更改,以恢复到之前的状态。这可能是因为我们进行了错误的修改,或者想要重新开始某些工作。
实现步骤 方法一:使用 git restore
(Git 2.23 及以上版本) 1 git restore path/to/file/to/revert
方法二:使用 git checkout
(Git 2.23 之前版本) 1 git checkout -- path/to/file/to/revert
方法三:结合 git clean
和 git checkout
1 2 git clean -df git checkout -- .
git clean -df
用于删除所有未跟踪的文件和目录,git checkout -- .
用于清除所有未暂存的更改。
方法四:使用 git stash
1 git stash save --keep-index --include-untracked
如果不需要处理未跟踪的文件,可以不使用 --include-untracked
。之后,如果想丢弃这个 stash,可以使用 git stash drop
命令。
方法五:使用 git checkout -p
此命令可以让你选择性地撤销更改块。
核心代码 使用 git restore
丢弃未暂存更改 1 2 3 4 5 git restore . git restore path/to/file
使用 git checkout
丢弃未暂存更改 1 2 3 4 5 git checkout -- . git checkout -- path/to/file
结合 git clean
和 git checkout
1 2 git clean -df git checkout -- .
最佳实践 使用 git status
查看状态 :在执行任何丢弃操作之前,使用 git status
命令查看当前工作目录的状态,确保你要丢弃的是未暂存的更改。使用 git restore
或 git checkout
处理已跟踪文件 :如果只需要丢弃已跟踪文件的未暂存更改,优先使用 git restore
(Git 2.23 及以上)或 git checkout
。结合 git clean
处理未跟踪文件 :如果存在未跟踪的文件,并且你确定要删除它们,可以结合使用 git clean -df
。使用 git stash
保存更改 :如果你不确定是否要永久丢弃更改,可以使用 git stash
将更改保存起来,之后可以随时恢复。常见问题 git checkout -- .
提示错误如果存在未跟踪的文件,git checkout -- .
可能会提示错误:error: The following untracked working tree files would be overwritten by checkout
。此时可以结合 git clean -df
先删除未跟踪的文件,再执行 git checkout -- .
。
git clean -df
删除了重要文件git clean -df
可能会删除一些你不想删除的文件,如配置文件等。在执行该命令之前,可以先使用 git clean -dfn
进行预览,确认要删除的文件列表。
git stash
污染了 stash 栈git stash
会将更改保存到 stash 栈中,如果频繁使用可能会导致 stash 栈变得混乱。可以使用 git stash drop
删除不需要的 stash。