Git安全回退历史版本
Git安全回退历史版本
方法 | 特点 |
---|---|
git revert | 保留所有中间提交历史,生成显式的反向提交,适合精确撤销特定提交。 |
直接提交 | 快速生成一个回退提交,无需处理多个撤销操作,适合简单回退到某个旧版本。 |
git revert
仅回退一个版本
git revert HEAD
回退多个版本
git revert D C B # 先撤销最近的提交 D,再依次撤销 C、B
git revert --no-commit B..D # 撤销提交 B 到 D 之间的所有提交(不含 B)
git commit -m "Revert commits from B to D"
查看是否完成回退操作
git status
完成:
On branch master
nothing to commit, working tree clean
未完成:
On branch master
You are currently reverting commit b358355.
(all conflicts fixed: run "git revert --continue")
(use "git revert --skip" to skip this patch)
(use "git revert --abort" to cancel the revert operation)
其余操作
git revert --continue
作用:
继续完成当前的 revert
操作。
使用场景:
- 当
revert
过程中遇到冲突时,Git 会暂停操作并提示你解决冲突。 - 解决冲突后,使用
git add <文件>
标记冲突文件为已解决。 - 然后运行
git revert --continue
,Git 会生成一个新的反向提交,完成revert
操作。
示例:
# 解决冲突后
git add <冲突文件>
git revert --continue
git revert --skip
作用:
跳过当前的 revert
操作(跳过当前提交)。
使用场景:
- 当
revert
过程中遇到冲突,但你不想解决冲突,而是希望跳过当前提交的撤销操作。 - 跳过当前提交后,Git 会继续处理后续的
revert
操作(如果有)。
示例:
# 跳过当前提交
git revert --skip
git revert --abort
作用:
完全放弃当前的 revert
操作,恢复到执行 revert
之前的状态。
使用场景:
- 当
revert
过程中遇到问题(如冲突无法解决),或者你不想继续revert
操作时。 - 运行
git revert --abort
后,所有未完成的revert
操作都会被取消,工作目录和暂存区会恢复到执行revert
之前的状态。
示例:
# 放弃当前的 revert 操作
git revert --abort
直接提交
checkout方式
git checkout <目标版本哈希> -- .
git commit -m "回退到目标版本 <目标版本哈希>"
git read-tree方式
git read-tree -u --reset <目标版本哈希>
git commit -m "回退到目标版本 <目标版本哈希>"