Git 分支管理和冲突解决
Git 分支管理和冲突解决
创建分支
git branch
没有参数,显示本地版本库中所有的本地分支名称。
当前检出分支的前面会有星号。
git branch newname
在当前检出分支上新建分支,名叫newname。
git checkout newname
检出分支,即切换到名叫newname的分支。
git checkout –b newname master
这个命令将上面两个命令合并:在master分支上创建分支newname分支并检出到该分支。
合并分支间的修改 Merge
合并操作将两条或多条分支合并到一起,实际上有好几种分支合并方法,下面介绍主要的三种:
1.直接合并(straight merge):
把两条分支上的历史轨迹合并,交汇到一起。
比如要把dev分支上的所有东东合并到master分支:
首先先到master分支:git checkout master
然后把dev给合并过来:git merge dev
注意没参数的情况下merge是fast-forward的,即Git将master分支的指针直接移到dev的最前方。
换句话说,如果顺着一个分支走下去可以到达另一个分支的话,那么Git在合并两者时,只会简单移动指针,所以这种合并成为快进式(Fast-forward)。
2.压合合并(squashed commits):
将一条分支上的若干个提交条目压合成一个提交条目,提交到另一条分支的末梢。
把dev分支上的所有提交压合成主分支上的一个提交,即压合提交:
git checkout master
git merge --squash dev
此时,dev上的所有提交已经合并到当前工作区并暂存,但还没有作为一个提交,可以像其他提交一样,把这个改动提交到版本库中:
git commit –m “something from dev”
3.拣选合并(cherry-picking):
拣选另一条分支上的某个提交条目的改动带到当前分支上。
每一次提交都会产生一个全局唯一的提交名称,利用这个名称就可以进行拣选提交。
比如在dev上的某个提交叫:321d76f
把它合并到master中:
git checkout master
git cherry-pick 321d76f
要拣选多个提交,可以给git cherry-pick命令传递-n选项,比如:
git cherry-pick –n 321d76f
这样在拣选了这个改动之后,进行暂存而不立即提交,接着可以进行下一个拣选操作,一旦拣选完需要的各个提交,就可以一并提交。
冲突处理
当两条分支对同一个文件的同一个文本块进行了不同的修改,并试图合并时,Git不能自动合并的,称之为冲突(conflict)。解决冲突需要人工处理。
比如当前在master分支,想把dev分支merge过来,结果产生了一个冲突,打开文件内容可以看到这么一个冲突:
<<<<<<< HEAD test in master ======= test in dev >>>>>>> dev
<<<<<<<标记冲突开始,后面跟的是当前分支中的内容。
HEAD指向当前分支末梢的提交。
=======之后,>>>>>>>之前是要merge过来的另一条分支上的代码。
>>>>>>>之后的dev是该分支的名字。
对于简单的合并,手工编辑,然后去掉这些标记,最后像往常的提交一样先add再commit即可。
删除分支
有些分支没有必要长期保存,比如分支中的代码已经打了标签并已发布,或者实验分支已经成功完成工作或中途废弃等等。
注意:打了标签的分支,Git在删除该分支时,从版本树起始到此标签间的全部历史轨迹均会保留,此时删除分支操作只是删除分支本身的名称,因此可以说该分支没有必要长期保存。
而在其他版本控制工具中,删除分支通常意味着删除分支上的所有历史轨迹,所以不能因为打了标签就认为其没有必要保存。
删除一个分支dev2:
git branch –d dev2
注意不能删除当前所在分支,需要转到别的分支上。
如果要删除的分支已经成功合并到当前分支,删除分支的操作会直接成功。
如果要删除的分支没有合并到当前所在分支,则会出现提示,如果确定无须合并而要直接删除,则执行命令:
git branch –D dev2
进行强删。
分支重命名
重命名分支:
git branch –m oldname newname
-m不会覆盖已有分支名称,即如果名为newname的分支已经存在,则会提示已经存在了。
如果改成-M就可以覆盖已有分支名称了,即会强制覆盖名为newname的分支,这种操作要谨慎。
参考资料
《版本控制之道——使用Git》(Pragmatic Version Control Using Git)
Git分支管理策略:http://www.ruanyifeng.com/blog/2012/07/git.html
Git Reference: http://gitref.org/
Git 分支管理和冲突解决的更多相关文章
- Git应用—03分支管理和冲突解决(转载)
Git 分支管理和冲突解决 https://www.cnblogs.com/mengdd/p/3585038.html 创建分支 git branch 没有参数,显示本地版本库中所有的本地分支名称. ...
- 关于git-Git 分支管理和冲突解决
创建分支 git branch 没有参数,显示本地版本库中所有的本地分支名称. 当前检出分支的前面会有星号. git branch newname 在当前检出分支上新建分支,名叫newname. gi ...
- Git分支合并冲突解决(续)
接Git分支合并冲突解决,在使用rebase合并冲突情况下,如果不小心,执行完add后执行了commit,此时本地仓库HEAD处于游离态(即HEAD指向未知的分支),如何解决? 解决方法 (1)此时, ...
- Git 学习笔记--Git下的冲突解决
冲突的产生 很多命令都可能出现冲突,但从根本上来讲,都是merge 和 patch(应用补丁)时产生冲突. 而rebase就是重新设置基准,然后应用补丁的过程,所以也会冲突. git pull会自动m ...
- Git下的冲突解决【转】
本文转载自:http://www.cnblogs.com/sinojelly/archive/2011/08/07/2130172.html 冲突的产生 很多命令都可能出现冲突,但从根本上来讲,都是m ...
- git学习之冲突解决办法
1.如果本地项目和远程服务器的同一文件都有改动,那么就会产生冲突,导致git pull 失败,报错见下. 解决办法:先执行git stash指令,暂存当前的改动状态,再执行git pull指令,就可以 ...
- git分支管理和stash
1 创建分支$ git branch 分支名 2切换到分支$ git checkout 分支名 3查看提交git log --oneline --decorate --graph --all 4 轻量 ...
- Git分支合并冲突解决
前2天群里发了张git历史图,如下: 根据提交历史,可以看出图中所有分支合并都采用merge的方式,具体merge是怎么操作的,可以阅读下边文章. 根据项目上的需求,如果要求git提交历史是比较简单的 ...
- git操作之冲突解决
应用场景,任哥,我两个人共同修改了git项目上的一个文件.zsh命令行模式 准备工作 简写命令解释 gl=git pullgp=git pushgst=git statusgcmsg=git comm ...
随机推荐
- 设备模型(device-model)之平台总线(bus),驱动(driver),设备(device)
关于关于驱动设备模型相关概念请参考<Linux Device Drivers>等相关书籍,和内核源码目录...\Documentation\driver-model 简单来说总线(bus) ...
- 4-iscsi
Iscsi 1. 创建lvm 2. 安装scsi服务端软件包 第一种(命令模式) 第二种(配置文件模式) 客户端 Node1 寻找scsi服务器上的储存设备 将scsi设备挂载 ...
- stm32 usb error : identifier "bool" is undefined
.\usb\USB\usb_pwr.h(54): error: #20: identifier "bool" is undefinedusb\USB\usb_pwr.h(54): ...
- monkeyrunner之坐标或控件ID获取方法-续
在之前的文章中,介绍过控件坐标和ID的获取方法,这里,我们再介绍一个新的工具-uiautomatorviewer. Uiautomatorviewer是Android sdk自带的工具,位置在sdk/ ...
- css content之counter-reset、content-increment
万万没想到,写了快三年前端,有不会用的css,居然还有完全没听过.见过的css属性,而且还是CSS2的内容! 关于counter-reset.content-increment两个属性的详解可以参看张 ...
- [LeetCode] Find All Duplicates in an Array 找出数组中所有重复项
Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others ...
- [LeetCode] Factor Combinations 因子组合
Numbers can be regarded as product of its factors. For example, 8 = 2 x 2 x 2; = 2 x 4. Write a func ...
- [LeetCode] Merge Two Sorted Lists 混合插入有序链表
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...
- poj题目
poj2965 poj1753:标准的BFS+位运算优化 poj1328:线段覆盖变种,把圆对应到线段上,贪心求解 poj2109:高精度开根,二分+高精度,注意要判断答案的位数,如果按照题目给的范围 ...
- Android 开源框架Universal-Image-Loader学习
Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 Android 开源框架Universal-Image-Loader完全解析(二)--- 图片 ...