基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

如何丢弃git工作区中对某个文件(或所有文件)的修改?

知识点图片

在 Git 中丢弃工作区的修改,推荐使用 Git 2.23 版本引入的 git restore 命令(语义更清晰)。如果你使用的是老版本 Git,可以使用 git checkout

以下是针对不同场景的具体操作方法:

1. 丢弃「某个特定文件」的修改

如果这个文件还没有git add 到暂存区:

  • 新版推荐:
    bash
    git restore <文件名>
  • 老版写法:
    bash
    git checkout -- <文件名>

(注意:这会把文件恢复到最后一次 commit 的状态,你所做的修改将永远丢失,无法找回!)


2. 丢弃「所有文件」的修改(未暂存)

如果你想把当前目录下所有已修改但还没有 git add 的文件全部还原:

  • 新版推荐:
    bash
    git restore .
  • 老版写法:
    bash
    git checkout .

3. 如果文件已经被 git add 到暂存区了怎么办?

如果文件不仅修改了,还执行了 git add,你需要分两步走(先移出暂存区,再丢弃修改):

针对单个文件:

  1. 移出暂存区(Unstage):git restore --staged <文件名> (老版:git reset HEAD <文件名>)
  2. 丢弃修改:git restore <文件名>

针对所有文件:

  1. 全部移出暂存区:git restore --staged . (老版:git reset HEAD .)
  2. 丢弃所有修改:git restore .

4. 终极杀招:强制重置所有文件(包含已暂存和未暂存)

如果你把代码改得一团糟,想直接让当前分支回到最后一次 commit 的状态,无视任何 git add 或未暂存的修改,可以使用硬重置:

bash
git reset --hard HEAD

(警告:这个命令非常危险,会无情地抹掉工作区和暂存区的所有未提交改动!)


5. 如何丢弃「新增的、未被 Git 追踪的」文件?

以上命令(包括 git reset --hard)只能影响已经被 Git 记录(Tracked)的文件。如果你新建了一些文件或文件夹,Git 还不认识它们,你需要用 git clean 命令来删除:

  • 先预览会删除哪些文件(安全起见,推荐先执行这个):
    bash
    git clean -n
  • 真正删除未追踪的文件和文件夹:
    bash
    git clean -fd

💡 总结:想彻底清空所有改动(回到最干净的状态)

如果你想丢弃所有修改并且删除所有新加的未追踪文件,按顺序执行这两条命令即可:

bash
git reset --hard HEAD
git clean -fd
00:00
00:00