Git 中丢弃未暂存更改的方法

Git 中丢弃未暂存更改的方法

技术背景

在使用 Git 进行版本控制时,我们常常会对文件进行修改。这些修改会处于不同的状态,如未暂存、已暂存和已提交。有时,我们可能需要丢弃那些还未暂存的更改,以恢复到之前的状态。这可能是因为我们进行了错误的修改,或者想要重新开始某些工作。

实现步骤

方法一:使用 git restore(Git 2.23 及以上版本)

  • 丢弃当前工作目录下所有未暂存文件的更改
1
git restore .
  • 丢弃特定文件的未暂存更改
1
git restore path/to/file/to/revert

方法二:使用 git checkout(Git 2.23 之前版本)

  • 丢弃当前工作目录下所有未暂存文件的更改
1
git checkout -- .
  • 丢弃特定文件的未暂存更改
1
git checkout -- path/to/file/to/revert

方法三:结合 git cleangit 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

1
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 cleangit checkout

1
2
git clean -df
git checkout -- .

最佳实践

  • 使用 git status 查看状态:在执行任何丢弃操作之前,使用 git status 命令查看当前工作目录的状态,确保你要丢弃的是未暂存的更改。
  • 使用 git restoregit 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。


Git 中丢弃未暂存更改的方法
https://119291.xyz/posts/2025-04-16.git-discard-unstaged-changes-guide/
作者
ww
发布于
2025年4月16日
许可协议