git revert
git reset(危险):
├── 直接删除提交历史
├── 修改 Git 历史
└── 团队协作中容易出问题
git revert(安全):
├── 保留原始提交历史
├── 创建新的"反转提交"
└── 适合已推送到远程的提交
工作原理:
原始历史:A → B → C → D (HEAD)
执行:git revert C
结果:A → B → C → D → C' (HEAD)
其中 C'
是新创建的提交,它的内容完全抵消了 C
的修改。
# 撤销最新提交
git revert HEAD# 撤销指定提交(通过 hash)
git revert 70a6d7b4# 撤销指定提交(通过相对位置)
git revert HEAD~2 # 撤销倒数第3个提交# 撤销连续的多个提交(从 HEAD 到 HEAD~2)
git revert HEAD~2..HEAD# 撤销多个不连续的提交
git revert 70a6d7b4 cc53969d# 撤销一个范围的提交
git revert A..B # 撤销从 A 到 B 的所有提交(不包括 A)# -n, --no-commit:不自动提交,只修改工作区
git revert -n HEAD# -m, --mainline:用于撤销合并提交
git revert -m 1 <merge-commit># --no-edit:使用默认提交信息
git revert --no-edit HEAD# --strategy:指定合并策略
git revert --strategy=recursive HEAD# --continue:解决冲突后继续
git revert --continue# --abort:取消正在进行的 revert
git revert --abort
解决冲突
# 1. 执行 revert 遇到冲突
git revert cc53969d
# 输出:error: could not revert cc53969d...
# hint: after resolving the conflicts, mark the corrected paths# 2. 查看冲突文件
git status
# 显示冲突文件列表# 3. 手动编辑冲突文件
# 解决 <<<<<<< HEAD 和 >>>>>>> parent of cc53969d 之间的冲突# 4. 标记冲突已解决
git add <冲突文件># 5. 继续 revert
git revert --continue# 或者放弃 revert
git revert --abort