Git 如何丢弃未暂存的改动

丢弃未暂存改动:单个文件 git restore <文件>(旧语法 git checkout -- <文件>),全部文件 git restore . 或 git checkout -- .。未跟踪的新文件用 git clean -f。操作不可逆,丢弃前可用 git diff 最后确认。

最佳实践
Git 分支协作与合并示意

单个文件:git restore 文件名;全部:git restore .(Git 2.23 之前的旧语法是 git checkout -- 文件名)。这会把已跟踪文件还原到最近一次提交的内容,未暂存的修改就此消失,不可恢复。

按范围丢弃

git restore src/app.js        # 单个文件
git restore src/              # 整个目录
git restore .                 # 全部已跟踪文件

连带处理其他状态

git restore --staged .        # 已暂存的撤出暂存区(变成未暂存)
git clean -fd                 # 删除未跟踪的新文件/目录
git reset --hard              # 一条命令还原暂存区+工作区(不动未跟踪文件)

丢弃前最后一眼

git diff                      # 查看所有未暂存改动
git diff src/app.js           # 只看这个文件

不想丢,只是想挪开?

git stash                     # 收起来,之后 stash pop 找回
git stash push -m "备注"       # 加备注更好认

常见问题(FAQ)

Q:restore 之后能找回吗?

不能。未提交过的改动不在 Git 对象库里,丢弃即永久丢失。这就是为什么 stash 是更安全的"撤销"。

Q:git checkout -- . 和 git restore . 一样吗?

一样。restore 是 Git 2.23 引入的语义更明确的新命令(checkout 身兼切分支和还原文件两职太混乱),老语法仍然兼容。

Q:为什么 git clean 默认要加 -f?

防止误删的保护:不带 -f 或 -n(预览)时 Git 拒绝执行。养成先 git clean -nd 预览的习惯。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台