返回

修补不慎合上的吉他弦:Git撤销已合并提交的N种姿势

前端

撤销 Git 合并提交的艺术

在代码仓库中,合并分支是一项至关重要的任务,然而,有时候我们会不小心将不合适的提交合入了主干。当这种情况发生时,你可能会感到万分焦急,甚至产生想要放弃的念头。但请不要灰心,Git 为我们提供了多种撤销已合并提交的方法,帮助你重回正确的音轨。

一、妙手回春:Git Reset

Git Reset 命令是撤销已合并提交的常用方法之一。它允许你将当前分支重置到某个特定的提交点,从而覆盖掉此后所有已合并的提交。

  1. 重置到上一个提交
git reset --soft HEAD~1

这条命令将当前分支重置到上一个提交点,但不会影响工作目录中的文件。这意味着,你可以查看和修改这些文件,然后使用 git commit 命令重新提交。

  1. 重置到任意提交
git reset --soft <commit-ish>

这条命令允许你将当前分支重置到任意指定的提交点。你可以使用提交的哈希值、提交的别名或提交的标签来指定要重置到的提交点。

二、化腐朽为神奇:Git Revert

Git Revert 命令也是一种撤销已合并提交的方法,但它与 Git Reset 不同。Git Revert 命令不会修改当前分支的提交历史,而是创建一个新的提交来抵消已合并提交的影响。

  1. 撤销单个提交
git revert <commit-ish>

这条命令将创建一个新的提交来抵消指定提交的影响。新的提交将包含与指定提交相反的更改,并且它将被添加到当前分支的提交历史中。

  1. 撤销多个提交
git revert -n <number-of-commits>

这条命令将创建一个新的提交来抵消最近的 n 个提交的影响。新的提交将包含与最近的 n 个提交相反的更改,并且它将被添加到当前分支的提交历史中。

三、釜底抽薪:Git Cherry-pick

Git Cherry-pick 命令允许你将某个提交从一个分支移植到另一个分支。这种方法可以用来撤销已合并提交,但它与 Git Reset 和 Git Revert 不同。

git cherry-pick <commit-ish>

这条命令将指定的提交从另一个分支移植到当前分支。新的提交将被添加到当前分支的提交历史中,并且它将包含与指定提交相同的更改。

四、适用场景

每种撤销已合并提交的方法都有其自身的适用场景:

  • Git Reset 适用于需要覆盖掉已合并提交的历史记录的情况。
  • Git Revert 适用于需要保留已合并提交的历史记录,但又需要抵消其影响的情况。
  • Git Cherry-pick 适用于需要将特定提交移植到另一个分支的情况。

五、常见问题解答

  1. 哪种方法是撤销已合并提交的最佳选择?

这取决于具体的情况。一般来说,Git Reset 适用于需要覆盖掉历史记录的情况,而 Git Revert 适用于需要保留历史记录的情况。

  1. 撤销已合并提交后,我的工作目录中的文件会被影响吗?

Git Reset --soft 命令不会影响工作目录中的文件,而 Git Reset --hard 命令会覆盖掉工作目录中的文件。

  1. 我可以撤销多次合并的提交吗?

可以。使用 Git Revert 命令可以撤销多次合并的提交。

  1. 撤销已合并提交后,我可以恢复它吗?

可以。使用 Git Reflog 命令可以查看提交历史记录,并恢复已撤销的提交。

  1. 我无法使用 Git Reset 或 Git Revert 命令撤销合并提交,该怎么办?

请确保你正在使用正确的提交哈希值或别名。如果你仍然无法撤销提交,请尝试使用 Git Cherry-pick 命令。

结语

撤销已合并提交在 Git 中是一项重要的技能。通过使用 Git Reset、Git Revert 和 Git Cherry-pick 命令,你可以轻松地纠正错误,并保持代码仓库的整洁有序。