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 | git push --force-with-lease |
比 --force 安全:如果远程分支在不知情情况下被别人推进了新提交,它会拒绝覆盖。