如何在 Git 中放弃本地更改并删除未跟踪的文件
三个不同的命令清除三种不同的变化。以下是如何丢弃编辑、暂存的更改和新文件、一个文件或所有文件,以及如何先预览它,这样就不会有任何重要的事情发生。
撰写者 Kodmora
GitTree 背后的软件公司
- 撤消和恢复
- 分期
在此页面上
要放弃对跟踪文件的更改,请运行 `git restore .` 要删除未跟踪的文件和文件夹,请运行 `git clean -fd`。要完全返回到上次提交,请运行 `git reset --hard`,然后运行 `git clean -fd`。 Git 无法在事后恢复这些更改,因此请先使用 git status 和 git clean -nd 进行预览。
哪个命令丢弃什么?
| 你想要的东西消失了 | 命令 |
|---|---|
| 编辑一个跟踪文件 | git restore path/to/file |
| 编辑所有跟踪的文件 | git restore . |
| 分阶段更改,保留编辑 | git restore --staged . |
| 分阶段的更改和编辑 | git restore --staged --worktree . |
| Git 不跟踪新文件 | git clean -f |
| 新文件和文件夹 | git clean -fd |
| 自上次提交以来的所有内容 | git reset --hard 然后 git clean -fd |
如何放弃对一个文件的更改?
git restore src/search.ts
# only some of the changes, hunk by hunk
git restore -p src/search.ts
# the same file as it was on another branch
git restore --source=main src/search.ts较旧的指南使用 git checkout -- src/search.ts。它仍然有效,但 git restore(Git 2.23 或更高版本)仅执行这一项工作,因此更难滥用。
如何放弃所有本地更改?
# tracked files, staged or not
git reset --hard
# then untracked files and folders
git clean -fd
# confirm
git status
# nothing to commit, working tree clean没有提交的 git reset --hard 会将分支保留在原来的位置,并且只清除文件。 Git Reset 解释 介绍了命名提交时它的作用。
如何取消暂存文件而不丢失它?
git restore --staged src/search.ts文件离开暂存区域,您的编辑保留在工作文件夹中。什么都没有被删除。
如何使用 git clean 删除未跟踪的文件?
始终先预览。 -n 是一次预演,仅列出将要执行的操作:
# preview files and folders
git clean -nd
# delete them
git clean -fd
# ask about each one
git clean -id| 旗帜 | 含义 |
|---|---|
-n | 试运行:仅列出,不删除任何内容 |
-f | Force:需要删除任何内容 |
-d | 包括未跟踪的文件夹 |
-i | 互动:选择发生的事情 |
-x | 同时删除忽略的文件,例如 .env 和 node_modules |
-X | 仅删除被忽略的文件 |
我可以恢复放弃的更改吗?
- 提交的工作: 是的,通过
git reflog。 - 隐藏的工作:是的。即使是掉落的储藏室也经常可以找到,如恢复掉落的储藏室 中所示。
- 已暂存但从未提交: 有时,与
git fsck --lost-found一起。 - 从未暂存过:没有。你的编辑的当地历史可能仍然有它。
如果文件被删除并提交,如何恢复已删除的文件 有步骤。
如何放弃 GitTree 中的更改
选择要扔掉的东西
将鼠标悬停在更改面板中的文件并选择“放弃对文件的更改...”,或右键单击多个文件以进行“放弃对文件的更改...”。在差异中,使用 Discard Hunk 或 Discard Lines。
清理或清理一切
从命令选项板运行 清理未跟踪的文件... 或 放弃所有更改...。
阅读确认信息
该对话框命名了将要执行的操作,并且 取消 是默认值。 GitTree 首先保存恢复快照,因此 撤消 可以将其恢复。

请参阅放弃更改并清理未跟踪的文件 了解每个选项,并参阅忽略并清理课程 进行练习。
常见问题
git恢复和git checkout有什么区别?
git checkout 都可以切换分支并恢复文件。 Git 2.23 将这些作业拆分为 git switch 和 git restore,更加清晰。旧的形式仍然有效。
git reset --hard 是否删除未跟踪的文件?
不会。它仅重置跟踪的文件。新文件将保留到您运行 git clean -fd 为止。
为什么 git clean 说“拒绝清理”?
Git 默认需要 -f (clean.requireForce),这样拼写错误就无法删除文件。一旦试运行看起来正确,就添加 -f。
git clean 会删除被忽略的文件吗?
除非您添加 -x 或 -X,否则不会。普通的 git clean -fd 会保留 .gitignore 中的所有内容。
如何保留更改但获得干净的文件夹?
运行git stash -u。它保存跟踪和未跟踪的更改并清除文件夹。稍后使用 git stash pop 将它们带回来,如隐藏指南 中所述。
来源
有关其他产品的声明已根据其位于 2026年11月7日 的官方页面进行了检查。价格和功能发生变化;供应商的页面是事实的来源。
