likes
comments
collection
share

工具篇:Git优雅的撤销中间某次提交

作者站长头像
站长
· 阅读数 80

优雅地撤销Git中的中间某次提交,通常是指:在保持提记录的完整性的同时,移除或撤销特定的提交,且保留后续提交的状态。

1. 使用 git revert 命令

适用场景:适用于任何情况,特别是当您希望撤销的提交已经推送至共享仓库,且不希望改变公共历史记录时。

操作步骤

  1. 查看提交历史:使用 git log 查找您想要撤销的中间提交的哈希(SHA值)。

  2. 执行撤销:运行以下命令

git revert commit_id

commit_id 替换为待撤销提交的哈希。

这将创建一个新的提交,其内容恰好抵消了指定提交所做的更改。这样,历史记录中保留了撤销行为的记录,而不会丢失任何后续提交。

  1. 推送更改:如果撤销的是已推送的提交,您需要将包含撤销提交的新分支推送到远程仓库:
git push origin HEAD

2. 使用 git rebase -i 进行交互式变基

适用场景:当撤销的提交尚未推送到共享仓库,且您对变基操作带来的历史重构感到舒适时。

操作步骤

  1. 查看提交历史:同样使用 git log 找到您想要撤销的中间提交的哈希。

  2. 启动交互式变基:运行以下命令

git rebase -i commit_id

commit_id 替换为您想撤销提交的前一次提交的哈希。

这将打开一个文本编辑器,显示从指定提交开始的一系列待编辑提交列表。

  1. 编辑提交列表:在编辑器中,找到您要撤销的提交,将其对应的行上的 pick 修改为 drop 或者直接删除该行。保存并关闭编辑器。

  2. 完成变基:Git将自动重演选定的提交,并跳过被标记为 drop 的提交。如果有冲突出现,按照提示解决冲突,然后继续变基过程:

git rebase --continue

  1. 推送更改:由于您改变了历史记录,需要使用 --force 或 --force-with-lease 参数来强制推送:
git push origin HEAD --force-with-lease

3. 使用 git cherry-pick 复制后续正确提交

适用场景:当您使用 git reset 回退到出错提交之前的状态后,希望重新应用之后的正确提交。

操作步骤

  1. 回退到出错提交前:使用 git reset --hard 移动 HEAD 到出错提交的前一个提交:
git reset --hard commit_id

 commit_id 替换为出错提交前的哈希。

  1. 复制后续正确提交:对于出错提交之后每个正确的提交,使用 git cherry-pick 应用它们的更改:
git cherry-pick commit_id

commit_id 替换为出错提交后,要正确提交的哈希。

  1. 解决可能的冲突:在应用每个提交时,如果有冲突出现,按照提示解决冲突,然后继续 cherry-picking:
git cherry-pick --continue

  1. 推送更改:由于您改变了历史记录,需要使用 --force 或 --force-with-lease 参数来强制推送:
git push origin HEAD --force-with-lease

转载自:https://juejin.cn/post/7352367029859450920
评论
请登录