如何撤销Git的一次分支合并操作
合并分支的操作rebase或者merge
使用git多人协作开发同一个项目时,多人协同编写修改同一份代码时,各自在自己的分支上修改编辑代码;最终都需要保存提交到代码的主分支,这里会涉及到分支间的合并操作一般为:
git merge masterbranch
git rebase masterbranch
这两个操作都是将当前所在的分支与masterbranch分支合并;具体的区别或者合并的具体解释该篇博文暂不介绍。
如何快速安全的撤销一次合并操作?
如下当前处于开发分支developing,远端主分支为master:
两个分支各有两次提交:
在developing分支执行git merge master操作:
在这个前提下,假如突然发现合并错分支想撤销此次合并,这里介绍两个方案:
- 危险操作的保护ORIG_HEAD
根据一个stack overflow的大神的原话解释:
HEAD is (direct or indirect, i.e. symbolic) reference to the current commit. It is a commit that you have checked in the working directory (unless you made some changes, or equivalent), and it is a commit on top of which “git commit” would make a new one. Usually HEAD is symbolic reference to some other named branch; this branch is currently checked out branch, or current branch. HEAD can also point directly to a commit; this state is called “detached HEAD”, and can be understood as being on unnamed, anonymous branch.
ORIG_HEAD is previous state of HEAD, set by commands that have possibly dangerous behavior, to be easy to revert them. It is less useful now that Git has reflog: HEAD@{1} is roughly equivalent to ORIG_HEAD (HEAD@{1} is always last value of HEAD, ORIG_HEAD is last value of HEAD before dangerous operation).
大概就是git在你进行一些比较大风险性操作的时会将ORIG_HEAD指向该危险操作的起点,相当游戏中自动记录了一个复活点在ORIG_HEAD。所以在rebase后者merge操作后,如果你并没有进行任何其它操作可以直接使用
git reset --hard ORIG_HEAD
快速撤销此次合并,非常方便好用。
- 使用git reflog实现神一般的回退
如果合并之后已经做了一些操作或者想做一些更细致的回退操作使用git reflog来查找你需要的“复活点”,事实上git会标记并记录你大部分的操作,相当于随时给你做了相当多的游戏存档,在你需要时可以选择任意存档来重新开始,但是可能会丢失掉一些修改,不了解reset操作的童鞋请先补习慎重使用。
git reset --hard HEAD@{8}
从图中可以看到,大部分的HEAD@{*}记录了你重要的提交/切换/合并等操作的点,找到你需要回退的点,执行reset操作即可实现回退。
参考的stack overflow:
http://stackoverflow.com/questions/964876/head-and-orig-head-in-git
http://stackoverflow.com/questions/134882/undoing-a-git-rebase/135614#135614
如何撤销Git的一次分支合并操作相关推荐
- 【Git】如何进行分支合并
[Git]如何进行分支合并 在平时的开发中,我们通常会在 Git上建立多个分支,以方便代码的管理与维护,比如[master-dev]开发模型,这种开发模型就是 master存放已完成的代码,而 dev ...
- Git分支合并操作教程(超详细配图说明)
测试内容: A.首先建立master,提交文件a.b.c B.新建分支branch1,包含master文件a.b.c,修改a提交branch1 (此时两个分支a文件不同,b.c相同) C.在maste ...
- Git基本操作- 命令 merge - 分支合并、处理冲突
官方帮助文档 $ git help merge GIT-MERGE(1) Git Manual GIT-MERGE(1) NAMEgit-merge - Join two or more develo ...
- c++两个vector合并_这才是真正的 Git:分支合并
公众号关注 "GitHubDaily"设为 "星标",每天带你逛 GitHub! 本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件 ...
- c++两个vector合并_这才是真正的 Git——分支合并
本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的 ...
- 这才是真正的 Git——分支合并
本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的 ...
- git 主干修改合并到分支_git分支与主干合并操作
git分支与主干合并操作 1.主干合并分支 在主干上合并分支 branch (master)git merge branch --squash 提交合并后的代码 (master)git commit ...
- git 分支合并主干、主干合并分支
git 分支合并主干.主干合并分支 复杂的项目都会有主干和分支,每过一段时间后便会将分支代码合并到主干或者将主干代码合并到分支,以下是主干分支合并时的步骤和对应的git命令. branch为分支名 ...
- Git 分支合并情况
本文章主要是记录自己学习git时候,面对分支合并,考虑的一些情形,仅供参考. 1.没有冲突的情况 master分支没做改变,branch1改变,将branch1合并到master分支上. 具体操作如下 ...
最新文章
- 将Bean放入Spring容器中的五种方式
- LeetCode 795. Number of Subarrays with Bounded Maximum
- EMNLP 2019中和BERT相关的一些论文介绍
- ElasticSearch 性能优化实战,让你的 ES 飞起来!
- Boost多线程-替换MFC线程
- 网络IPC:套接字之建立连接
- ASP.NET Core管道深度剖析(3):管道是如何处理HTTP请求的?
- ubuntu zip解压
- 通过GUID生成可持久化的PID
- python风控建模培训
- junit5教程_JUnit5教程
- vue使用coreUI的CDataTable踩坑记录
- RHEL7安装配置FTP服务
- 【Android】EasyClient与EasyCamera的移植学习
- ftp上传工具如何下载和使用像详细教程
- CentOS7关于hostname
- wince 德赛西威2413_德赛西威NAV262大众全系通用DVD导航产品介绍
- 白鹭php源码,看源码系列之从运行流程开始-Egret社区-教程文档-白鹭引擎-Egret Engine-免费开源HTML5游戏引擎 - Powered by Discuz!...
- android adb 模拟长按,adb 模拟长按电源键
- Bootstrap3基础 table-striped 表格实现隔行换色(浅灰色与白色交替)
热门文章
- html页面栅格系统,详解CSS中的栅格系统
- Linux 换源方法
- 【数据集8】全球人口数据WorldPop详解
- 全文翻译:EDPB数据保护影响评估(DPIA:Data Protection Impact Assessment)指南
- 关于syslog报文的RFC规范
- 艾瑞中国5G AI典型案例2021年研究报告-免费行业报告下载
- 项目看板开发经验分享(二)——事业部能源监控看板(进度条拟柱状图图表、圆柱形柱状图、图表左右滚动进度条、导航轮播按钮)
- a12处理器怎么样_a14和a12z哪个性能好?处理器参数对比怎么样?
- 南农计算机复试英语笔试,2013年南农复试笔试题.doc
- S32K148_ProcessorExpert之定时器中断