最常見的幾種撤回方式:
目標 | 使用命令 | 是否保留修改 |
---|---|---|
撤回最后一次 commit,但保留代碼修改 | git reset --soft HEAD~1 | ? 保留 |
撤回最后一次 commit,并丟棄修改 | git reset --hard HEAD~1 | ? 丟棄 |
撤回某個 commit,但保留后續提交 | git revert <commit-id> | ? 保留歷史 |
刪除最近 N 次 commit | git reset --hard HEAD~N | ? 丟棄 |
常用示例
1. 撤回最近一次提交,保留代碼改動
git reset --soft HEAD~1
?回到 git commit
之前,代碼還是改過的,可以重新提交。
2. 撤回最近一次提交,并清空代碼改動
git reset --hard HEAD~1
?? 不可恢復! 會丟掉本地改動!
3. 撤回一個老的提交(保留后續提交)
git log # 找到 commit-id
git revert abc123
生成一個“反向提交”來撤回 abc123,但不會影響后續提交,適用于已 push 的提交。
?注意事項
-
reset
適用于本地分支,不要對已 push 到遠程的提交用--hard
,會讓別人歷史錯亂。 -
revert
安全用于任何場景,推薦撤回遠程 commit。
? 快速撤銷 push 的提交(遠程誤提交)
git reset --hard HEAD~1
git push origin HEAD --force # ?? 謹慎使用,確保無人依賴