git revert

git revert 文章目录1. 简介2. 格式3. 选项4. 示例4.1 撤销单个提交4.2 撤销多个提交4.3 撤销合并提交4.4 只暂存不提交4.5 解决冲突5. 注意5.1 git revert vs git reset 对比5.2 revert 多个提交的顺序5.3 revert 合并提交的特殊性5.4 撤销 revert恢复被撤销的提交5.5 常用别名设置6. 小结参考文献1. 简介git revert用于撤销部分现有提交。git revert不会删除历史提交记录会用一个新的提交来消除历史提交所做的修改。新提交的内容是“反向”的——即撤销指定提交所引入的变更。与git reset不同git revert是安全的因为它不修改历史适合用于已推送到远程仓库的公共分支。典型场景撤销已经推送到远程的提交撤销公共分支如main上的错误提交需要保留完整历史记录的场景2. 格式gitrevert[options]commit...gitrevert(--continue|--skip|--abort|--quit)3. 选项-n, --no-commit 只暂存撤销的变更不自动提交可继续修改或添加其他变更 -e,--edit在提交前编辑提交信息默认行为 --no-edit 不编辑提交信息直接使用自动生成的默认信息 -m,--mainlineparent-number指定撤销合并提交时保留哪个父分支1 或2 --no-commit 只将变更放入暂存区不自动提交--signoff在提交信息末尾添加 Signed-off-by 行--continue解决冲突后继续 revert--skip跳过当前提交--abort放弃 revert恢复到操作前的状态--quit忘记并中断放弃当前的 revert 操作但保留工作区和暂存区当前的修改即冲突解决了一半的状态4. 示例4.1 撤销单个提交# 撤销最近一次提交会打开编辑器让你修改提交信息gitrevert HEAD# 撤销指定提交然后生成一个新的提交gitrevert a1b2c3d# 使用默认提交信息不编辑gitrevert --no-edit a1b2c3d4.2 撤销多个提交# 撤销多个提交按顺序从新到旧gitrevert a1b2c3d e5f6g7h# 撤销一段范围不包含 A包含 Bgitrevert A..B4.3 撤销合并提交# 撤销合并提交需要指定保留哪个父分支# -m 1保留第一个父分支通常是主分支gitrevert-m1a1b2c3d4.4 只暂存不提交# 只将撤销的变更加入暂存区不自动提交gitrevert-na1b2c3d4.5 解决冲突# revert 时产生冲突gitrevert a1b2c3d# CONFLICT in main.go# 手动解决冲突后gitaddmain.gogitrevert--continue# 或者放弃 revertgitrevert--abort5. 注意5.1git revertvsgit reset对比对比维度git revertgit reset是否改变历史❌ 否创建新提交✅ 是删除提交是否安全用于公共分支✅ 是❌ 否会改写历史撤销方式增加反向提交删除提交适用场景已推送的公共分支本地未推送的分支与 git reset 的区别主要有实现的方式不用。git revert使用一次新的提交来回退到指定版本不会改变历史的提交历史。git reset移动 HEAD 指针指向历史某次提交历史提交记录将被改变。因此git revert一般用在公共分支上git reset一般用在私有分支上。使用的场景不同。git revert一般只用于版本回退撤销已经提交的更改并且要求暂存区与工作区是干净的。git reset一般用于撤销未提交的修改比如使用git reset --hard放弃暂存区与工作区的修改。5.2 revert 多个提交的顺序# revert 多个提交时按从新到旧的顺序gitrevert HEAD~2 HEAD~1 HEAD# 等价于先 revert 最新的再 revert 次新的5.3 revert 合并提交的特殊性# 合并提交有两个父提交必须用 -m 指定保留哪个# 查看合并提交的两个父分支gitshow a1b2c3d# 一般 -m 1 表示保留当前分支目标分支gitrevert-m1a1b2c3d5.4 撤销 revert恢复被撤销的提交# 如果 revert 错了可以直接 revert 这个 revert 提交gitrevertrevert-commit5.5 常用别名设置gitconfig--globalalias.rvrevert --no-editgitconfig--globalalias.rvcrevert --continue# 使用别名gitrv a1b2c3dgitrvc6. 小结需求命令说明撤销最近一次提交git revert HEAD创建反向提交撤销指定提交git revert a1b2c3d撤销该提交的修改撤销多个提交git revert a1b2c3d e5f6g7h按从新到旧的顺序撤销合并提交git revert -m 1 a1b2c3d必须指定-m参数使用默认提交信息git revert --no-edit a1b2c3d不打开编辑器解决冲突后继续git add . git revert --continue继续 revert放弃 revertgit revert --abort恢复到操作前一句话总结git revert是安全撤销的命令它不删除历史而是创建反向提交。适合撤销已推送到远程的公共分支。撤销合并提交时必须用-m指定保留哪个父分支。参考文献Git - git-revert Documentation