it编程 > 编程语言 > 其他编程

Git丢弃对一个文件的改动的方法详解

101人参与 2026-05-07 其他编程

背景

当我们进行日常开发时,有时候需要丢弃对一个文件的改动。为了便于描述,我们假设这个文件是 f.txt\text{f.txt}f.txt。会有两种情况 ⬇️

本文会对这两种情况分别进行介绍

要点

仅丢弃尚未暂存的改动

执行以下两个命令中的 任何一个 都可以丢弃 尚未暂存 的改动

git restore <file>
## 或者
git checkout <file>

注意事项

丢弃 已暂存 的改动 + 尚未暂存 的改动

执行以下两个命令中的 任何一个 都可以丢弃 已暂存 的改动 + 尚未暂存 的改动

git restore --staged --worktree <file>
## 或者
git checkout head <file>

注意事项

正文

示例

准备工作

请将以下代码保存为 main.sh (具体的名称并不重要)

## prepare a temp dir for our test
mkdir temp
cd temp

## prepare for the initial commit
git init
echo "content committed" >> f.txt
git add f.txt
git commit -m "initial commit"

## stage some content in f.txt
echo "staged content in f.txt" >> f.txt
git add f.txt

## add some content to be staged in f.txt
echo "content to be staged ..." >> f.txt

通过执行下方的命令就可以运行 main.sh ⬇️

bash main.sh

运行完 main.sh 之后,当前目录中会多出一个 temp 目录。在当前目录执行 tree temp 命令后,应该可以看到如下的内容

temp
└── f.txt

1 directory, 1 file

通过执行如下命令,可以切换到 temp 目录中 ⬇️

cd temp

temp 目录中,我们执行如下命令就可以看到 f.txt\text{f.txt}f.txt 的状态

git status

执行该命令后,可以看到 f.txt\text{f.txt}f.txt 中既有 已暂存 的改动(如下图绿色框所示),也有 尚未暂存 的改动(如下图红色框所示)

各个状态的 f.txt\text{f.txt}f.txt 的内容列举如下

内容
commit\text{commit}commitf.txt\text{f.txt}f.txtcontent committed
已暂存的 f.txt\text{f.txt}f.txtcontent committed
staged content in f.txt
当前的 f.txt\text{f.txt}f.txtcontent committed
staged content in f.txt
content to be staged ...

如果我们想让 f.txt\text{f.txt}f.txt 变回下图红框里的这个样子,那么只需要丢弃 尚未暂存 的改动

如果我们想让 f.txt\text{f.txt}f.txt 变回下图绿框里的这个样子,那么需要丢弃 已暂存 的改动 + 尚未暂存 的改动

我们分别来看

情形一:仅丢弃尚未暂存的改动

请注意:尚未暂存 的改动被丢弃之后就找不回来了

第一种方式:基于git restore\text{git restore}git restore命令

我们可以用 git restore\text{git restore}git restore 命令来丢弃 f.txt\text{f.txt}f.txt 中尚未暂存的改动

git restore f.txt

执行该命令后,我们再用 git status\text{git status}git status 命令和 cat f.txt\text{cat f.txt}cat f.txt 命令验证一下

从红色框的内容可以看出,f.txt\text{f.txt}f.txt 的变化符合预期。

第二种方式:基于git checkout\text{git checkout}git checkout命令

我们也可以用 git checkout\text{git checkout}git checkout 命令来丢弃 f.txt\text{f.txt}f.txt 中尚未暂存的改动

git checkout f.txt

执行该命令后,可以再用 git status\text{git status}git status 命令和 cat f.txt\text{cat f.txt}cat f.txt 命令验证一下

从红色框的内容可以看出,f.txt\text{f.txt}f.txt 的变化符合预期。

情形二:丢弃 已暂存 与 尚未暂存 的改动

请注意:已暂存/尚未暂存 的改动被丢弃之后就找不回来了

第一种方式:基于git restore\text{git restore}git restore命令

我们可以用 git restore\text{git restore}git restore 命令来丢弃 f.txt\text{f.txt}f.txt已暂存 的改动 + 尚未暂存 的改动

git restore --staged --worktree f.txt

执行该命令后,我们再用 git status\text{git status}git status 命令和 cat f.txt\text{cat f.txt}cat f.txt 命令验证一下 ⬇️

从红色框的内容可以看出,f.txt\text{f.txt}f.txt 的变化符合预期。

第二种方式:基于git checkout\text{git checkout}git checkout命令

我们也可以用 git checkout\text{git checkout}git checkout 命令来丢弃 f.txt\text{f.txt}f.txt已暂存 的改动 + 尚未暂存 的改动

git checkout head f.txt

执行该命令后,我们再用 git status\text{git status}git status 命令和 cat f.txt\text{cat f.txt}cat f.txt 命令验证一下 ⬇️

从红色框的内容可以看出,f.txt\text{f.txt}f.txt 的变化符合预期。

参考资料

git cheat sheet

下图中的内容与本文有关

git restore 命令的文档

下图红色框中的内容和本文有关

git checkout 命令的文档

下图红色框中的内容和本文有关

以上就是git丢弃对一个文件的改动的方法详解的详细内容,更多关于git丢弃文件改动的资料请关注代码网其它相关文章!

(0)

您想发表意见!!点此发布评论

推荐阅读

Git使用二分法git bisect精准定位Bug的全面指南

05-07

git下实现快速提交及推送

05-07

Git推送时间修改方式

05-07

服务器上搭建git仓库与钩子hook的配置过程

05-07

Git开发中的常用指令及其使用场景详解

05-08

vscode中eslint插件不生效的解决过程

04-30

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论