如何使用 Git 撤消已推送的提交
介绍
版本控制的一大优势在于,你可以将代码回滚到任何历史时间点,而不会对团队成员造成太大干扰。然而,回滚代码并不总是那么简单,尤其是在你仍在学习 Git 或熟悉命令行操作的情况下。在本文中,我将指导你如何在通过终端推送更改后撤消提交。
请注意,本文的目标读者包括学生、早期开发者或缺乏版本控制经验的人士。请勿发表任何令人沮丧的评论,批评那些缺乏版本控制经验的人。作为软件工程师,我们必须记住,简单是相对的,技术的学习曲线非常陡峭。有些人甚至可能有几年的经验,但仍然对版本控制的恢复感到不确定。
为了继续,您应该已经拥有:
- GitHub 帐户 - 如果您没有,可以在此处找到注册说明
- 在您的计算机上安装 Git - 您可以在此处找到安装 Git 的说明。
- 创建了 GitHub 存储库
理解提交是什么
提交是代码库的快照。运行该命令git commit
会保存该时间点的代码库版本。想象一下:Git 为你的代码库拍了一张“照片”,并附上信息:“这是你的代码库在 2022 年 1 月 12 日下午 3:55 的样子。@blackgirlbytes修复了代码库中的一个拼写错误。” 建议经常进行小规模的提交,以便:
- 如果犯了错误,可以轻松回滚一小部分代码
- 使您(和其他人)了解代码库的演变
推送后撤消提交
让我们重新创建一个需要在推送后撤消提交的情况。
设置
- 在您的存储库中,在我们的存储库中创建一个名为 index.md 的新文件。
- 让我们提交并推送一些更改到我们的代码库。为了方便本教程,我添加了一些随意的更改。在下图中,我在 index.md 文件的第一行添加了“hey, there”。然后,我运行以下命令来添加、提交和推送更改。
git add index.md
git commit -m "added a greeting"
git push
恢复提交
- 但是,假设我意识到我不想提交或推送“hey, there”这句话到我的仓库。也许我只是为了测试目的才添加的,或者我漏掉了另一行我想包含在提交中的内容。让我们看看如何撤消提交:
通过运行以下命令查看您在此存储库中所做的提交列表:
git log -p
从图中我们可以看到我们进行了两次提交。最近的一次提交表示我们在第一行添加了“hey, there”。最早的一次提交表示我们创建了一个 index.md 文件。每次提交都有一个提交哈希值(以“commit”开头的一长串字母数字唯一字符串),它是附加提交的唯一标识符。
要撤消最近的提交,我们可以复制提交哈希并运行以下命令:
git revert [commit hash]
就我而言,我会跑
git revert 0a3dbc774ea29bfd68fe55caf1ade33dba1bda35
其他选择
- 一种更短的方法是运行命令
git revert 0a3d
。Git 足够智能,可以根据前四个(或更多)字符识别提交。 - 您不必使用提交哈希来标识要还原的提交。您可以使用任何被视为 gitrevision 的值,包括:
- 标签
- 分支
- 哈希
- 参考
您可以在此处或在git scm 文档中了解有关git 修订的更多信息。
-
您可能会看到类似下图所示的消息。这被称为 COMMIT_EDITMSG;它保存着正在进行的提交的提交消息。它包含您正在回滚的提交的信息,包括作者、分支、文件和消息。您的目标是查看它并关闭提交编辑器。
-
如果此文件在 IDE 中打开,您可以直接在顶部关闭它。如果您在 Vim 终端中看到此消息,可以使用以下命令
:wq
在Stackoverflow 答案中了解有关退出此模式的更多信息。
现在您已退出终端,可以通过运行命令来完成该过程git push
。运行此命令后,您已成功还原提交。
您可以通过在 GitHub.com 上查看该仓库的提交历史记录来确认是否已还原提交。下图显示了准确的提交日志,突出显示了我遇到的以下几个时刻:
- 创建 index.md 文件
- 添加了问候语
- 撤销提交
感谢Nathan审阅本文并提供宝贵的反馈。❤️
如果这篇文章帮助您理解了恢复提交,请在 DEV 上关注GitHub和我!
文章来源:https://dev.to/github/how-to-undo-pushed-commits-with-git-2pe6