git revert--撤回提交的代码,新的提交去覆盖
git revert--撤回提交的代码
·
上周提交的代码,这周发现改错了,需要撤回,记录一下
git revert 是 Git 中用于撤销特定提交(commit)的命令,它通过创建一个新的提交来抵消目标提交的修改,而非直接删除历史记录,因此不会破坏版本库的提交历史,是协作场景下安全撤销操作的首选方式。
基本用法
1. 撤销最近的一个提交
bash
git revert HEAD
HEAD指向当前分支的最新提交,此命令会撤销最新提交的修改,并自动创建一个新提交(需填写提交信息)。
2. 撤销指定提交
通过提交的哈希值(commit-hash)指定要撤销的提交:
bash
git revert <commit-hash>
- 例如:
git revert a1b2c3d(a1b2c3d是目标提交的哈希前缀)。 - 执行后会自动打开编辑器,要求填写撤销提交的说明(默认信息为
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 会提示冲突,此时需要:
- 手动编辑冲突文件,解决冲突(标记为
<<<<<<< HEAD、=======、>>>>>>> parent of <commit-hash>的部分)。 - 解决后执行
git add <冲突文件>标记为已解决。 - 执行
git revert --continue完成撤销提交;若要放弃撤销,执行git revert --abort。
与 git reset 的区别
| 特性 | git revert |
git reset |
|---|---|---|
| 历史记录影响 | 新增撤销提交,保留原历史 | 直接删除指定提交之后的历史(危险) |
| 适用场景 | 已推送到远程的提交(多人协作) | 仅本地未推送的提交(个人工作区) |
| 安全性 | 安全,不破坏历史 | 危险,可能丢失提交,影响协作 |
注意事项
- 不要撤销合并提交(merge commit):合并提交有两个父提交,直接
git revert <merge-commit>会报错,需用-m指定保留哪个父分支的代码(例如git revert -m 1 <merge-hash>,1表示第一个父分支)。 - 撤销后需推送:若撤销的是已推送到远程的提交,完成
git revert后需执行git push将新的撤销提交推送到远程,同步给其他人。 - 谨慎撤销多个提交:连续撤销多个提交时,若中间有依赖关系(如后一个提交修改了前一个提交的代码),可能会频繁触发冲突,建议分步操作。
更多推荐
所有评论(0)