上周提交的代码,这周发现改错了,需要撤回,记录一下

git revert 是 Git 中用于撤销特定提交(commit)的命令,它通过创建一个新的提交来抵消目标提交的修改,而非直接删除历史记录,因此不会破坏版本库的提交历史,是协作场景下安全撤销操作的首选方式。

基本用法

1. 撤销最近的一个提交

bash

git revert HEAD
  • HEAD 指向当前分支的最新提交,此命令会撤销最新提交的修改,并自动创建一个新提交(需填写提交信息)。
2. 撤销指定提交

通过提交的哈希值(commit-hash)指定要撤销的提交:

bash

git revert <commit-hash>
  • 例如:git revert a1b2c3da1b2c3d 是目标提交的哈希前缀)。
  • 执行后会自动打开编辑器,要求填写撤销提交的说明(默认信息为 Revert "原提交信息"),保存后完成新提交。
3. 撤销多个连续提交

撤销从 commit1 到 commit2(包含两端)的所有提交(注意顺序是旧提交在前,新提交在后):

bash

git revert <commit1>..<commit2>
  • 例如:git revert 8f32d1e..a1b2c3d 会撤销 8f32d1e 到 a1b2c3d 之间的所有提交。
  • 每个被撤销的提交都会生成一个对应的新提交,需依次填写提交信息。
4. 撤销时跳过编辑器,直接使用默认信息

bash

git revert -m "自定义撤销说明" <commit-hash>  # 自定义信息
# 或使用默认信息(Revert "原提交信息")
git revert --no-edit <commit-hash>

处理冲突

如果目标提交的修改与当前工作区的代码有冲突(例如,撤销的提交修改了某行,而之后的提交也修改了同一行),git revert 会提示冲突,此时需要:

  1. 手动编辑冲突文件,解决冲突(标记为 <<<<<<< HEAD=======>>>>>>> parent of <commit-hash> 的部分)。
  2. 解决后执行 git add <冲突文件> 标记为已解决。
  3. 执行 git revert --continue 完成撤销提交;若要放弃撤销,执行 git revert --abort

与 git reset 的区别

特性 git revert git reset
历史记录影响 新增撤销提交,保留原历史 直接删除指定提交之后的历史(危险)
适用场景 已推送到远程的提交(多人协作) 仅本地未推送的提交(个人工作区)
安全性 安全,不破坏历史 危险,可能丢失提交,影响协作

注意事项

  1. 不要撤销合并提交(merge commit):合并提交有两个父提交,直接 git revert <merge-commit> 会报错,需用 -m 指定保留哪个父分支的代码(例如 git revert -m 1 <merge-hash>1 表示第一个父分支)。
  2. 撤销后需推送:若撤销的是已推送到远程的提交,完成 git revert 后需执行 git push 将新的撤销提交推送到远程,同步给其他人。
  3. 谨慎撤销多个提交:连续撤销多个提交时,若中间有依赖关系(如后一个提交修改了前一个提交的代码),可能会频繁触发冲突,建议分步操作。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐