文章目录
- 请注意:尚未暂存 的改动被丢弃之后就找不回来了
- 我们可以用 git restoretext{git restore}git restore 命令来丢弃 f.txttext{f.txt}f.txt 中尚未暂存的改动 git restore f.txt 执行该命令后,我们再用 git statustext{git status}git status 命令和 cat f.txttext{cat f.txt}cat f.txt 命令验证一下 从红色框的内容可以看出,f.txttext{f.txt}f.txt 的变化符合预期。
- 我们也可以用 git checkouttext{git checkout}git checkout 命令来丢弃 f.txttext{f.txt}f.txt 中尚未暂存的改动 git checkout f.txt 执行该命令后,可以再用 git statustext{git status}git status 命令和 cat f.txttext{cat f.txt}cat f.txt 命令验证一下 从红色框的内容可以看出,f.txttext{f.txt}f.txt 的变化符合预期。
- 请注意:已暂存/尚未暂存 的改动被丢弃之后就找不回来了
- 我们可以用 git restoretext{git restore}git restore 命令来丢弃 f.txttext{f.txt}f.txt 中 已暂存 的改动 + 尚未暂存 的改动 git restore –staged –worktree f.txt 执行该命令后,我们再用 git statustext{git status}git status 命令和 cat f.txttext{cat f.txt}cat f.txt 命令验证一下 ⬇️ 从红色框的内容可以看出,f.txttext{f.txt}f.txt 的变化符合预期。
- 我们也可以用 git checkouttext{git checkout}git checkout 命令来丢弃 f.txttext{f.txt}f.txt 中 已暂存 的改动 + 尚未暂存 的改动 git checkout HEAD f.txt 执行该命令后,我们再用 git statustext{git status}git status 命令和 cat f.txttext{cat f.txt}cat f.txt 命令验证一下 ⬇️ 从红色框的内容可以看出,f.txttext{f.txt}f.txt 的变化符合预期。
目录
- 背景
- 要点
- 仅丢弃尚未暂存的改动
- 注意事项
- 丢弃 已暂存 的改动 + 尚未暂存 的改动
- 注意事项
- 正文
- 示例
- 准备工作
- 情形一:仅丢弃尚未暂存的改动
- 第一种方式:基于git restoretext{git restore}git restore命令
- 第二种方式:基于git checkouttext{git checkout}git checkout命令
- 情形二:丢弃 已暂存 与 尚未暂存 的改动
- 第一种方式:基于git restoretext{git restore}git restore命令
- 第二种方式:基于git checkouttext{git checkout}git checkout命令
- 参考资料
- Git Cheat Sheet
- git restore 命令的文档
- git checkout 命令的文档
当我们进行日常开发时,有时候需要丢弃对一个文件的改动。为了便于描述,我们假设这个文件是 f.txttext{f.txt}f.txt。会有两种情况 ⬇️
- 仅丢弃 f.txttext{f.txt}f.txt 尚未暂存 的改动
- 丢弃 f.txttext{f.txt}f.txt 已暂存 的改动 + 尚未暂存 的改动
本文会对这两种情况分别进行介绍
执行以下两个命令中的 任何一个 都可以丢弃 尚未暂存 的改动
git restore <file> ## 或者 git checkout <file>
- 执行命令时,需要将
<file> 替换为您想指定的文件(例如 f.txttext{f.txt}f.txt)
- 如果您是第一次使用它们,请不要用重要的项目来进行试验,以防误操作(尚未暂存 的改动被丢弃之后就找不回来了)
<file> 替换为您想指定的文件(例如 f.txttext{f.txt}f.txt)
执行以下两个命令中的 任何一个 都可以丢弃 已暂存 的改动 + 尚未暂存 的改动
git restore --staged --worktree <file> ## 或者 git checkout HEAD <file>
- 执行命令时,需要将
<file> 替换为您想指定的文件(例如 f.txttext{f.txt}f.txt)
- 如果您是第一次使用它们,请不要用重要的项目来进行试验,以防误操作(已暂存/尚未暂存 的改动被丢弃之后就找不回来了)
<file> 替换为您想指定的文件(例如 f.txttext{f.txt}f.txt)
请将以下代码保存为 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.txttext{f.txt}f.txt 的状态
git status
执行该命令后,可以看到 f.txttext{f.txt}f.txt 中既有 已暂存 的改动(如下图绿色框所示),也有 尚未暂存 的改动(如下图红色框所示)

各个状态的 f.txttext{f.txt}f.txt 的内容列举如下
| 内容 | |
|---|---|
| 已 committext{commit}commit 的 f.txttext{f.txt}f.txt | Content committed |
| 已暂存的 f.txttext{f.txt}f.txt | Content committed Staged content in f.txt |
| 当前的 f.txttext{f.txt}f.txt | Content committed Staged content in f.txt Content to be staged … |
如果我们想让 f.txttext{f.txt}f.txt 变回下图红框里的这个样子,那么只需要丢弃 尚未暂存 的改动

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

我们分别来看
请注意:尚未暂存 的改动被丢弃之后就找不回来了
我们可以用 git restoretext{git restore}git restore 命令来丢弃 f.txttext{f.txt}f.txt 中尚未暂存的改动
git restore f.txt
执行该命令后,我们再用 git statustext{git status}git status 命令和 cat f.txttext{cat f.txt}cat f.txt 命令验证一下

从红色框的内容可以看出,f.txttext{f.txt}f.txt 的变化符合预期。
我们也可以用 git checkouttext{git checkout}git checkout 命令来丢弃 f.txttext{f.txt}f.txt 中尚未暂存的改动
git checkout f.txt
执行该命令后,可以再用 git statustext{git status}git status 命令和 cat f.txttext{cat f.txt}cat f.txt 命令验证一下

从红色框的内容可以看出,f.txttext{f.txt}f.txt 的变化符合预期。
请注意:已暂存/尚未暂存 的改动被丢弃之后就找不回来了
我们可以用 git restoretext{git restore}git restore 命令来丢弃 f.txttext{f.txt}f.txt 中 已暂存 的改动 + 尚未暂存 的改动
git restore --staged --worktree f.txt
执行该命令后,我们再用 git statustext{git status}git status 命令和 cat f.txttext{cat f.txt}cat f.txt 命令验证一下 ⬇️

从红色框的内容可以看出,f.txttext{f.txt}f.txt 的变化符合预期。
我们也可以用 git checkouttext{git checkout}git checkout 命令来丢弃 f.txttext{f.txt}f.txt 中 已暂存 的改动 + 尚未暂存 的改动
git checkout HEAD f.txt
执行该命令后,我们再用 git statustext{git status}git status 命令和 cat f.txttext{cat f.txt}cat f.txt 命令验证一下 ⬇️

从红色框的内容可以看出,f.txttext{f.txt}f.txt 的变化符合预期。
下图中的内容与本文有关

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

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

以上就是Git丢弃对一个文件的改动的方法详解的详细内容,更多关于Git丢弃文件改动的资料请关注风君子博客其它相关文章!
您可能感兴趣的文章:
- Git查看已删除文件历史记录的方法
- IDEA中git使用实现文件修改后有颜色提示的设置
- idea git设置Local Changes窗口过程(代码/文件变更显示)
- idea提交git版本由于中文文件名卡死不动
- 强制git pull覆盖本地文件的方法