当前位置: 首页 > news >正文

如何使用 Git Revert 撤销合并提交

        在使用 Git 进行版本控制时,合并分支是一个常见的操作。然而,有时候我们可能需要撤销之前的合并操作。本文将详细介绍如何使用 git revert 撤销合并提交,即使在合并提交之后还有其他提交。

场景描述:

假设你有两个远程分支 mainfeaturefeature 分支上有一些提交:

A -> B -> C (main)\D -> E (feature)

你已经将 feature 分支合并到 main 分支,并将合并后的 main 分支推送到远程仓库,创建了一个合并提交 M。之后,main 分支上又有一些新的提交 FG

A -> B -> C -> M -> F -> G (main)\           /D -> E (feature)

现在你想撤销合并提交 M

步骤:

1. 切换到 main 分支

首先,确保你当前在 main 分支上:

git checkout main

2. 拉取最新的远程分支
确保你有最新的远程分支数据:

git pull origin main

3. 撤销合并提交 M(即hash版本号)
使用 git revert 命令撤销合并提交 M。由于合并提交有多个父提交,需要指定主分支(通常是第一个父提交)作为基准来撤销合并。这里的 -m 1 表示选择 M 的第一个父提交(即 C)作为基准来撤销合并。

git revert -m 1 M#或者带上提交信息,步骤4就不会出现
git revert -m 1 abc1234 -m "Revert merge of feature branch to fix issues"

4. 提交撤销操作
git revert 会打开一个编辑器让你输入撤销提交的信息,默认信息通常已经包含了撤销操作的描述。保存并关闭编辑器后,撤销提交就会被创建。

5. 推送撤销提交到远程仓库
将撤销提交推送到远程仓库,确保其他开发者也能看到撤销操作:

git push origin main

撤销结果

撤销合并提交 M 后,main 分支的提交历史将变成:

git log --oneline --graph
A -> B -> C -> M -> F -> G -> R (main)\           /D -> E (feature)
  • R 是一个新的提交,内容是撤销合并提交 M 的更改。
  • F 和 G 仍然是 main 分支的一部分,不受撤销操作的影响。

验证

使用 git log 命令来验证撤销操作的结果:

* 1234567 Revert "Merge branch 'feature' into main"
* 6789012 Commit G
* 5678901 Commit F
* abc1234 Merge branch 'feature' into main
|\
| * 567890e Commit E
| * 456789a Commit D
* cdef012 Commit C
* bdef012 Commit B
* adef012 Commit A

详细解释:
-m 1 选项:-m 1 表示选择合并提交 M 的第一个父提交作为基准。在合并提交中,第一个父提交通常是主分支(main),第二个父提交通常是被合并的分支(feature)。
撤销合并:git revert -m 1 M 会创建一个新的提交 R,这个提交的内容是撤销 M 引入的更改。R 提交会撤销 D 和 E 的更改,使 main 分支回到合并前的状态。
不影响 M 之后的提交:撤销 M 只会撤销 M 引入的更改,不会影响 M 之后的提交 F 和 G。

总结

  • 撤销远程分支合并:使用 git revert -m 1 <merge-commit-hash> 撤销合并提交 M
  • 拉取最新远程分支:确保在撤销操作前拉取最新的远程分支,以避免冲突。
  • 推送撤销提交:将撤销提交推送到远程仓库,确保其他开发者也能看到撤销操作。
  • 不影响 M 之后的提交:撤销 M 只会撤销 M 引入的更改,不会影响 M 之后的提交。

通过这些步骤,你可以有效地撤销远程分支的合并操作,即使在合并提交之后还有其他提交。


http://www.mrgr.cn/news/55277.html

相关文章:

  • 从零学习大模型(一)-----GPT3(上)
  • Pytorch常用函数汇总【持续更新】
  • Python包---numpy1
  • 【从零开发Mybatis】引入XNode和XPathParser
  • Lua条件语句
  • spring-第六章 GoF工厂模式
  • 公众号变现及生财内参项目建议
  • Linux虚拟机安装
  • Vue2、Vue3温习解惑知识点
  • java写一个MD5加密工具
  • Delphi下多线程控件BMDThread使用详解
  • nginx精讲
  • vue3 非父子组件间传值代码
  • Sigrity-Power SI如何使用Model Extraction模式同时提取电源和信号网络的S参数操作指导
  • vbs给qq发送消息
  • 2024人工智能报告.zip |一文迅速了解今年的AI界都发生了什么?
  • 基于SSM的校园跑腿网站的设计与实现
  • 银行报表测试
  • 简单走近ChatGPT
  • 科隆仪表IFC300W资料下载
  • 【QT速成】半小时入门QT6之QT前置知识扫盲(超详细QT工程解析)
  • MongoDB Shell 基本命令(二)操作符
  • Sigrity-Power SI如何使用Model Extraction模式提取电源网络的S参数和阻抗操作指导(一)
  • 探索CompletableFuture:高效异步编程的利器
  • C-自定义类型-联合和枚举
  • 数据库系统