git 回退commit和push

描述

已经 git commit 并且 git push 了,想“撤回上一个 commit 和 push”。
常见有两种做法:安全回滚(推荐) 或 强制改历史(谨慎)。

安全回滚

推荐,公共分支/多人协作都适用
思路:不改历史,而是再生成一个“反向提交”,把上一次提交的改动抵消掉,然后 push。

回滚上一个提交(会生成一个新的 commit)

1
git revert HEAD

推送到远程

1
git push

如果上一个提交是 merge commit,可能需要:

1
git revert -m 1 <merge_commit_sha>

强制撤回

注意:改写历史,只有确认没人基于它工作时用
思路:把本地分支指针退回到上一个提交之前,然后用 force push 覆盖远程。

本地撤回上一个 commit(两种常用方式)

  • 保留改动在工作区(撤回 commit,但代码还在,方便改完再提交):
1
git reset --soft HEAD~1

丢弃改动(直接不要这次提交的所有改动):

1
git reset --hard HEAD~1
  • 覆盖远程(更安全的强推方式)
1
2
git push --force-with-lease
--force-with-lease

--force 安全:如果远程分支在不知情情况下被别人推进了新提交,它会拒绝覆盖。