git的突出解决--git rebase之abort、continue、skip
(1)应用实例描述
假设在github或者gitoschina上建立了一个项目,默认分支为master分支,远程master分支上c.sh文件内容:

开发者A、B分别将项目拷贝到自己本地进行开发
某一天,开发者B提交c.sh,并且提交成功,

之后,开发者A在本地代码并没有和远程master分支的代码同步的情况下,对本地的c.sh进行了修改,修改后c.sh内容如下:

修改后,开发者A准备将代码提交到远程master分支上。
(2)引入问题
假设开发者A提交过程如下:
$ git add c.sh
$ git commit -m "XXXX"
如果直接使用$ git push,则会报错:
error: failed to push some refs to 'git@git.oschina.net:XXXX/gitlearning.git'
hint: Updates were rejected because the remote contains work that you do not have locally. This is usually caused by another repository pushing to the same ref. You may want to first integrate the remote changes (e.g., 'git pull ...') before pushing again. See the 'Note about fast-forwards' in 'git push --help' for details.
上述过程的节点走向如下图所示:

实际开发过程中考虑其它开发者可能会对c.sh进行修改,因此一般在开发过程中建议使用
$ git pull --rebase
与远程代码同步,同步过程会检查冲突,

此时,开发者根据 <<<<<<< HEAD,=======,>>>>>>> 便可知冲突的位置。
注意:不是出现冲突才使用git pull --rebase,它是一种解决冲突的手段,另外还有merge的方式
(3) 知识点引入
$ git pull --rebase
git pull的默认行为是git fetch + git merge
git pull --rebase则是git fetch + git rebase.
$ git fetch
从远程获取最新版本到本地,不会自动合并分支
$ git rebase
git rebase,顾名思义,就是重新定义(re)起点(base)的作用,即重新定义分支的版本库状态。本地更新分支节点过程如下图所示。(关于rebase节点知识点可以参考http://blog.csdn.net/hudashi/article/details/7664631/)

$ git pull --rebase
git pull --rebase执行过程中会将本地当前分支里的每个提交(commit)取消掉,然后把将本地当前分支更新为最新的"origin"分支,该过程本地分支节点更新图如下所示:

------------------------------------------------------------------------------------------
(4)回到主题
执行完git pull --rebase之后如果有合并冲突,使用以下三种方式处理这些冲突:
git rebase --abort 会放弃合并,回到rebase操作之前的状态,之前的提交的不会丢弃;
git rebase --skip 则会将引起冲突的commits丢弃掉(慎用!!);
git rebase --continue 合并冲突,结合"git add 文件"命令一起用与修复冲突,提示开发者,一步一步地有没有解决冲突。(fix conflicts and then run "git rebase --continue")
对上述冲突的处理
1、使用 $git rebase --abort
执行之后,本地内容会回到提交之间的状态,也就是回到以前提交但没有pull是的状态,简单来说就是撤销rebase。
2、使用 $git rebase --skip
git rebase --skip 引起冲突的commits会被丢弃,对于本文应用的例子来说开发者A对c.sh文件的commit无效,开发者A自己修改的部分全部无效,因此,在使用skip时请慎重。
执行:$ vim c.sh
查看本地c.sh文件提交内容,展示如下图所示,执行语句之后开发者A的修改无效。

3、使用 $git rebase --continue
执行完$git pull --rebase 之后,本地如果产生冲突,手动解决冲突之后,用"git add"命令去更新这些内容的索引(index),然后只要执行:
注意:一般情况下,修改后检查没问题,使用rebase continue来合并冲突。
git的突出解决--git rebase之abort、continue、skip的更多相关文章
- 1git命令的使用,查看git仓库状态,添加文件到git跟踪,git提交,查看git分支,查看git仓库日志信息,切换git分支,解决git分支合并后出现冲突的问题
1新建一个存储git的文件夹,命令是: toto@toto-K45VD:~$ mkdir gitfolder 2初始化一个git仓库,命令是: toto@toto-K45VD:~$cd gitfold ...
- 我的Git教程 之 解决 git clone后无代码
解决 git clone 后无代码 前言:这个教程只适用于像我一样大致理解Git的原理,但是不太记得住Git命令的同学使用.所以具体原理只会提一下,具体可以参见Pro Git. 在另一篇 简明的教程 ...
- IntellIJ IDEA 配置 Git,顺带解决Git Push rejected问题
1.下载便携版本git https://git-scm.com/download/win 弹出的下载取消,重新选择 2.解压自压缩文件. 3.配置IDEA 4.测试 5.配置终端环境shell为bas ...
- git lfs指令解决git status显示lib文件被修改,但是没有修改的问题。此时,git checkout没有用。
$ git lfs migrate import --everything --include='*.LIB'https://github.com/git-lfs/git-lfs/issues/283 ...
- 解决git rebase操作后推送远端分支不成功的问题
转:解决git rebase操作后推送远端分支不成功的问题 前段时间在工作中同事在rebase时遇到一个问题来问我,今天突然想起来觉得有必要记录一下. 在我们日常工作中,经常使用git座位代码管理工具 ...
- Git 进阶指南(git ssh keys / reset / rebase / alias / tag / submodule )
在掌握了基础的 Git 使用 之后,可能会遇到一些常见的问题.以下是猫哥筛选总结的部分常见问题,分享给各位朋友,掌握了这些问题的中的要点之后,git 进阶也就完成了,它包含以下部分: 如何修改 ori ...
- Git知识总览(四) git分支管理之rebase 以及 cherry-pick相关操作
上篇博客聊了<Git知识总览(三) 分支的创建.删除.切换.合并以及冲突解决>,本篇博客我们主要来看一下 rebase 变基相关的操作.rebase 操作和 merge 操作最终都可以达到 ...
- git第七节---git merge和git rebase
# git merge和git rebase 都可以进行分支合并 #git merge 合并后保留记录两个分支的记录 #git rebase合并后会展示成一个分支的记录,另一个分支的提交实际生成了一个 ...
- Git fetch和git pull的区别, 解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists).
Git fetch和git pull的区别, 解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists). Git fet ...
随机推荐
- MyEclipse项目突然报错JavanotFindClassException
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/UP19910522/article/details/25985277 好好的项目.从SVN检出到本地 ...
- 洛谷1527(bzoj2738)矩阵乘法——二维树状数组+整体二分
题目:https://www.luogu.org/problemnew/show/P1527 不难想到(?)可以用二维树状数组.但维护什么?怎么查询是难点. 因为求第k小,可以考虑记权值树状数组,把比 ...
- 4.Python爬虫小案例
1.网络爬虫定义:按照一定的规则,自动的抓取网站信息的程序或者脚本. 2.流程:request打开url得到html文档==浏览器打开源码分析元素节点==通过BeautifulSoup得到想要的数据= ...
- MIT App Inventor使用与入门教程
前言:随着信息技术新课标的提出,移动app应用设计被加入到新课标,程序与算法得到体现,学生的创造性,计算思维与信息意识也可以在其中得到体现. 安卓app开发目前比较火热的是Eclipse和Androi ...
- pycaffe + anaconda2 + python2.7.配置
1.首先要把caffe-windows用VS2013编译好(这一步很多门道,很麻烦很多坑),编辑props文件,使python支持选项开启,单独编译pycaffe项目就可以 2.将生成的在build/ ...
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料(下)
转载:http://www.jianshu.com/p/b73b6953e849 该资源的github地址:Qix <Statistical foundations of machine lea ...
- Java程序员之JS(一) 之 JQuery.ajax
背景:紧着现在项目的需要,先从JQuery.ajax出发,主要需求是通过 js 调用Java 代码,从而适应现在的项目. 先从几个概念开始讲解: 一. 什么是Deferred Deferred 对象 ...
- appium+python自动化33-解锁九宫格(TouchAction)
TouchAction 1.源码可以在这个路径找到:Lib\site-packages\appium\webdriver\common\touch_action.py class TouchActio ...
- 阿里云经典网络下一键安装RouterOS-ROS系统
1.阿里云环境centos6.9 x64: 内网网卡为eth0 外网网卡为eth1 阿里云的linux下硬盘名称为/dev/vda 注意阿里云的安全组建议开放任意协议和端口,任意IP允许访问 今天测试 ...
- Html5 input日期时间输入类型标签赋值 正确的格式应该是value="2014-03-15T08:00"
自己也亲测了!T在php的date函数中格式化后是CST 所以不能写成date('Y-m-dTH:i:s',time()) 得把把年月日和时间用date函数分别格式化 再用大写T分割开 放在v ...