原文:How to undo changes in Git,作者:Zell Liew

你可能已经知道,Git 就像一个保存点系统。一般来说,最初学习 Git 的时候,你要学会保存你的变更,并将它们提交到远程仓库。但如何撤销一个变更,回到之前的状态呢?

这就是我们在这篇文章中要介绍的内容。

本地与远程

撤销已经在远程的东西会更复杂。这就是为什么你想把代码放在本地,直到它们被确认后再推送到远程。

四种常见情况

我们将涵盖以下四种常见情况:

  • 放弃本地变更
  • 修改之前提交的内容
  • 回滚到之前的提交
  • 撤销已经推送到远程的提交

注意:在下面的截图中,我使用的是 Fork for Mac OS Git 客户端。你也可以在其他类似的 Git 客户端上做同样的事情。

场景一:放弃本地变更

第一种情况是当你已经做了一些变更,还没有提交它们,而你想删除这些变更。

比方说,我们想创建一个新的功能,我们要在项目中添加一些 HTML 和 CSS:

<!--In index.html-->
<div class="feature"></div>
```

```css
/* In CSS file */
.feature {
  font-size: 2em; 
  /* Other styles */
}

要放弃这些变更:

  • 打开暂存区(staging area)
  • 选择你想放弃修改的文件
  • 在这些文件上点击右键
  • 选择 Discard Changes
0*6JjR02sGP4FgM6zj

场景二:修改之前提交的内容

当你创建了一个提交,而漏掉了一些修改,你想在之前的提交信息中添加这些修改。

  • 打开暂存区(staging area)
  • 暂存要提交的文件
  • 点击 Amend(修改)复选框
  • 编辑你的提交信息
  • 提交
0*1wkCc2i9X8JWsBz4

场景三:回滚到之前的提交

在你的本地仓库中已经有了一些提交,你决定不再需要这些提交了,你想从之前的状态 “加载”你的文件。

  • 进入 Git 历史记录
  • 右键点击你想回滚的提交
  • 选择重置 branch
0*IwWQ9XZNRmCaVvb8
注意:你只能重置为尚未推送到远程的提交。

场景四:恢复已推送到远程的提交内容

如果你想恢复一个已经被推送到远程分支的提交,你可以采用以下方法。

恢复意味着通过创建一个新的提交来撤销修改。如果你添加了一行,这个恢复提交将删除这一行。如果你删除了一行,这个恢复提交将把这一行加回来。

要恢复的话,你可以:

  • 转到 Git 历史记录
  • 在你想恢复的提交上点击右键
  • 选择 Revert Commit(恢复提交)
  • 确保 commit the changes 被选中
  • 点击 Revert
0*29rgArX4rXn3aH6x
0*fUD5rUESrzaMnbXu

其他场景

GitHub 有一篇有用的文章,告诉你如何用 Git 撤销几乎所有的变更。如果你遇到其他情况,这篇文章会对你有帮助。请在这里阅读。

谢谢你阅读本文。这篇文章对你有什么帮助吗?如果有,我希望你考虑分享它,你可能会帮助别人。谢谢你!

这篇文章最初是在我的博客上发布的。

如果你想获得更多的文章来帮助你成为一个更好的前端开发者,欢迎订阅我的邮件