要撤回一个本地提交,有几种常见的方法
1. 撤销上一次提交但保留更改(最常用)
# 撤销提交,但保留所有文件更改在工作区
git reset --soft HEAD~1
2. 完全撤销上一次提交和所有更改
# 撤销提交,并删除所有文件更改(慎用!)
git reset --hard HEAD~1
3. 撤销提交但保留更改在暂存区
# 撤销提交,但保留文件更改在暂存区
git reset --mixed HEAD~1 # --mixed 是默认选项
4. 撤销指定次数的提交
# 撤销最近3次提交,但保留更改在工作区
git reset --soft HEAD~3
# 撤销最近3次提交,并删除所有更改
git reset --hard HEAD~3
5. 使用 revert(创建反向提交,推荐用于已推送的提交)
# 创建一个新的提交来撤销之前的提交
git revert HEAD
# 撤销指定提交(通过 commit hash)
git revert <commit-hash>
6. 查看提交历史后再撤销
# 先查看提交历史
git log --oneline -5
# 然后撤销到指定提交(保留更改)
git reset --soft <commit-hash>
# 撤销到指定提交(删除更改)
git reset --hard <commit-hash>
实用示例
假设你有以下提交历史:
a1b2c3d (HEAD) 第三次提交
e4f5g6h 第二次提交
i7j8k9l 第一次提交
场景1:想修改最后一次提交的内容
git reset --soft HEAD~1
# 修改文件
git add .
git commit -m "新的提交信息"
场景2:彻底删除最后一次提交
git reset --hard HEAD~1
场景3:已推送到远程的提交需要撤销
git revert HEAD
git push origin <branch-name>
重要提醒
-
谨慎使用
--hard:这会永久删除工作区和暂存区的更改 -
已推送到远程的提交 :使用
reset --hard后强制推送需要谨慎,最好使用revert -
备份重要更改:不确定时先备份或创建分支
