在 git 中提交后,如何撤销?
在 git 中撤消提交的最简单方法是使用 revert 选项:
这会撤销最近的提交。
包括使用 revert 在内,有两种方法可以撤销提交操作:
- git revert: 恢复 git 仓库的先前状态,并将更改反映在 git 日志中;
- git reset:删除上次提交。
还原提交(revert)
如果只是想要撤销一个提交,但是不删除 git 日志,可以使用 git revert 命令。其语法为我们刚刚提到过的:
上述命令中的 可以是用于提交的任何名称,比如可以是在提交的 SHA1(提交时会得到这个值)、标记、引用名称或者其他任何唯一标识提交的东西。
我们来举个例子。首先在 git 中初始化一个文件:
使用 cat 命令来看一下这个文件的内容:
然后我使用 git add . 将其添加到暂存区,再然后做一次提交(提交的文本为:a commit that will live on for ever):
这次提交,系统返回给我一个唯一标识(master b731901)。现在我们运行 git revert 并使用该唯一标识,来恢复到上一次提交的状态:
然后我们来看一下 git 日志,检查撤销操作有没有反映在日志中:
$ git log commit 01c9be75eff7b5ae48c6c35bbb7c63ac1ebc3fcd (HEAD -> master) Author: Pratham Patel <pratham@itsfoss.com> Date: Mon Feb 28 21:29:36 2022 +0530
上述输出可以看出,git 日志记录了这次撤销,但是 README 文件已经被回复到先前的状态:
删除提交
如果想要彻底恢复错误的提交且不保留日志,可使用 git reset。
git 中的每次提交(commit) 都相当于是仓库的一个快照,另外,在 git 中有一个名为 HEAD 的引用变量--使用 git log 查看日志的时候就能看到。这个 HEAD 用于指向你正在工作的分支中的最近提交。
为了演示,我们首先更改一个文件:
然后提交:
然后使用 git reset 命令来撤销这次提交:
接下来看下 git 日志:
可以看到,我们的上次提交(提交文本 a commit that I will regret later on)已经不见了。
由此可见,这个提交被完全被删除了,因为我将 HEAD 指向移动到了最后一个引用(用HEAD~1表示)。
这个删除操作并没有影响到我们的工作文件 README.md:
--soft 标志表示在运行 git reset 的时候修改的是 git 保存的日志。
如果想要将 git 存储库中的内容恢复到先前的状态,可使用 --hard 标志(不过要谨慎使用,确保需要的文件做好备份)。
相关文章
- DevOps 的运营和商业利益指南
- 如何避免淹没在云原生可观测性数据中
- 如何免费激活 Windows 11 系统?Windows 7密钥是个不错的选择
- Microsoft Edge 108 稳定版发布,支持启用 TLS ECH 加密
- 如何在 Bash 脚本中分割字符串
- Mozilla 正开发 Firefox 浏览器特定站点的搜索功能,可一步到位显示搜索结果
- 跟着小白一起学鸿蒙— 简析OpenHarmony用户鉴权
- 4MLinux 41.0 稳定版发布
- 不能错过的七个优秀独立 Linux 发行版
- 从IPC到分布式软总线的随笔
- 你现在可以在 Arch Linux 上安装 Unity 7.6 桌面了
- 在 Fedora Linux 系统上安装 PowerShell
- Authenticator:一个 Linux 上的 Authy 的简单的开源替代品
- 修复英特尔 Gen12 显卡安全漏洞,Linux 6.0.11/5.15.81/5.10.157 发布
- Bash 初学者系列 4:在 bash 中使用数组
- 跟着小白一起学鸿蒙—一起学做Tetris(下)
- JetBrains Fleet 和 VS Code:哪一个更好?
- 请尽快升级,谷歌 Chrome 浏览器、火狐 Firefox 浏览器用户需警惕间谍软件 Heliconia
- 使用 Git bisect 命令定位首次引入错误的提交
- Bodhi Linux 7.0.0 开始测试新的功能和软件包