本文档详细介绍Git中revert命令的使用方法,这是一个安全的撤销提交的方法,通过创建新的提交来反转之前提交的更改,而不是删除历史记录。文档涵盖基本概念、基本用法、常用选项、实际操作步骤、冲突处理、高级场景和最佳实践,帮助用户掌握安全撤销Git提交的完整流程。
git revert 是一个安全的撤销提交的方法,它通过创建一个新的提交来反转之前提交的更改,而不是删除历史记录。
git revert vs git reset 的区别:
git revert: 创建新提交来撤销更改,保留历史记录(安全)git reset: 直接移动 HEAD 指针,可能删除历史记录(危险,尤其在共享分支上)git revert HEAD
git revert <commit-hash>
例如:
git revert abc123d
# 方法1:逐个撤销
git revert commit1 commit2 commit3
# 方法2:撤销一个范围(注意:不包括 older-commit)
git revert older-commit..newer-commit
# 方法3:撤销一个范围(包括 older-commit)
git revert older-commit^..newer-commit
撤销更改但不立即提交,允许你一次性撤销多个提交:
git revert -n commit1
git revert -n commit2
git revert -n commit3
git commit -m "Revert multiple commits"
使用默认的 revert 提交信息,不打开编辑器:
git revert --no-edit abc123d
编辑 revert 提交信息(默认行为):
git revert -e abc123d
git log --oneline
输出示例:
d4e5f6g (HEAD -> main) Add feature C
c3d4e5f Add feature B
b2c3d4e Add feature A
a1b2c3d Initial commit
假设你想撤销 “Add feature B” (c3d4e5f):
git revert c3d4e5f
Git 会打开编辑器,默认提交信息类似:
Revert "Add feature B"
This reverts commit c3d4e5f.
保存并关闭编辑器。
git log --oneline
现在会看到:
e5f6g7h (HEAD -> main) Revert "Add feature B"
d4e5f6g Add feature C
c3d4e5f Add feature B
b2c3d4e Add feature A
a1b2c3d Initial commit
如果 revert 时出现冲突:
git revert abc123d
# 出现冲突信息
解决步骤:
git status
手动编辑冲突文件,移除冲突标记 (<<<<<<<, =======, >>>>>>>)
git add <conflicted-files>
git revert --continue
或者放弃 revert:
git revert --abort
Merge 提交有两个父提交,需要指定保留哪个:
# -m 1 保留第一个父提交(通常是主分支)
git revert -m 1 <merge-commit-hash>
git revert <commit-hash>
git push origin <branch-name>
git revert HEAD~2..HEAD
# 或
git revert HEAD HEAD~1 HEAD~2
git revert -n HEAD~2..HEAD
# 检查更改
git status
git diff --staged
# 一次性提交
git commit -m "Revert last 3 commits due to bug"