Git回滚代码的两种主要方式是git reset和git revert,分别适用于不同场景,以下是具体说明与实例解析:
一、git reset:彻底删除提交记录
作用:将指定提交从历史记录中完全移除,后续提交记录也会被删除。
适用场景:
- 主分支回滚:例如在master分支提交了A→B→C三个记录,若发现C有问题,可通过git reset回滚到B。
- 取消合并:开发分支develop合并到master后,若上线前发现合并内容有问题,可用git reset取消合并。
注意事项: - 慎用强制推送:回滚后本地记录会落后于远程仓库,需使用git push -f强制提交,但会覆盖他人提交,仅限个人分支或协作前明确沟通时使用。
- 避免滥用:若多人协作且已合并到主分支,滥用reset会导致他人提交记录丢失,引发冲突。
实例操作: - 合并develop到master后,通过git log找到目标提交(如B的哈希前7位69fde2c)。
- 执行git reset 69fde2c,此时本地master仅保留A和B的记录。
- 强制推送git push -f,远程仓库同步回滚状态。
二、git revert:生成反向提交抵消变更
作用:在当前提交后新增一次提交,抵消上一次提交的变更,不改变历史记录,是协作开发的首选方式。
适用场景:
- 修正错误提交:提交后发现内容有误,可通过git revert生成反向提交修正。
- 修改历史提交:多人协作时,需修改早期提交但不影响后续记录,可通过多次git revert逐个抵消。
实例操作: - 在develop分支(含3次提交)执行git revert 16083ce(抵消倒数第一个提交)。
- 工作区会显示反向变更,提交后生成新记录(如Revert "新增C"),原提交仍保留。
- 若需抵消多个提交,依次执行git revert对应哈希即可。
三、代码回滚的补充操作:打标签(Tag)
作用:为特定提交打标记,便于快速回滚到稳定版本。
常用命令:
- 查看标签:git tag。
- 创建标签:git tag [标签名](如git tag 测试4)。
- 查看标签详情:git show [标签名](如git show 测试1)。
应用场景:上线前打标签,若出现问题可通过标签对应的提交ID回滚。
总结:
- git reset适用于个人分支或明确无协作的场景,需谨慎使用强制推送。
- git revert是协作开发的安全选择,通过新增提交抵消变更,避免历史记录丢失。
- 打标签可辅助版本管理,为关键节点提供快速回滚的锚点。