git学习(2)---分支操作

一、目的

本文将介绍git分支的操作,包括新建和删除分支、查看和切换分支、合并分支和合并冲突等内容。

本文涉及到的所有操作都是在Ubuntu14.04环境中进行的,git版本是1.9.1。

二、新建和删除分支

使用git branch name命令新建一个名为name的分支;使用git branch -d name命令删除一个名为name的分支。

git默认的分支叫做master,在实际的项目中一般还会存在一个next分支。master分支作为主干版本,接受bugfix需求;next分支用来集成测试,接受开发完毕的新特性。此外,还会存在一些topic分支,每个topic分支用来实现一个新特性,新特性开发完成后,由next分支的维护者合并到next分支中,然后topic分支就可以被删除了。

三、查看和切换分支

使用git branch命令查看所有分支,并且前面标有星号的分支代表当前分支;使用git checkout name命令切换到name分支。

git使用HEAD索引指向当前分支,例如,版本中存在master和next两个分支,使用git checkout next命令切换到next分支后,HEAD就指向了next;使用git checkout master命令切换到master分支,HEAD就指向了master。

四、合并分支

常用的分支合并命令有:git merger、git rebase和git cherry-pick。

1、git merger

git merger按照时间顺序,将各个分支上的commit逐步合入,得到一个新的commit。

例如,版本存在master和next两个分支,在C3之后master提交了一个C5,next提交了一个C4和C6。

master使用git merger next将next分支的C4和C6合入到master中;首先,git按照commit提交的时间顺序,在C3之后合入C4;然后,再接着合入C5和C6;经过如此计算后,最终得到C7。

2、git rebase

git rebase首先缓存当前分支的commit,然后合入待合入分支的commit,最后再合入被缓存的commit。

例如,版本存在master和next两个分支,在C3之后master提交了一个C5,next提交了一个C4和C6。

next使用git merger master将master分支的C5合入到next中;首先,git缓存next分支的C4和C6,然后合入master分支的C5;最终再合入被缓存的C4和C6。

3、git cherry-pick

git cherry-pick命令用来合入分支中某个特定的commit。

例如,版本存在master和next两个分支,在C3之后master提交了一个C5,next提交了一个C4和C6。

master使用git cherry-pick命令只合入next分支中C4,而不合入C6。

五、合并冲突

在合并分支时,经常出现合并冲突,使用git status查看冲突原因,解决冲突后生成一个新的commit,然后提交给commit即可。

git在冲突文件中显式的标示出了冲突内容。

例如,使用<<<<<<<< HEAD表示当前分支的冲突内容,使用>>>>>>>>>>> next表示next分支的内冲突容,========划分冲突界线。由用户手动解决该冲突内容,并删除<<<<<<<<和>>>>>>>>>标示,生成一个新的commit,然后提交即可。

六、总结

本文介绍了git最大的特性和优势:分支技术。主要介绍了分支的新建和删除、分支的查看和切换,重点介绍了分支合并和冲突解决。

版权声明:

原创作品,如非商业性转载,请注明出处;如商业性转载出版,请与作者联系。

时间: 2024-10-11 06:02:26

git学习(2)---分支操作的相关文章

Git 学习笔记&lt;分支管理&gt; (三)

分支是什么? 分支就像树分出的树枝,不同的是,它们之间可以互相合并. 将版本的推进想象成一个链表的伸长:  version 1.0 ==> version 2.0 ==>version3.0  . master是主要的分支基本上用于发布产品.你可以从master分出一个dev,在上面创建新功能,或者修bug然后调试.最后再合并到master里面.就像下面这样. master分支:  version 1.0=========>version 2.0===... \            

Git Command #05 分支操作

git branch 列出所有本地分支 不包含遠端分支 可查看目前所在分支 git branch [Branch] 建立分支,但維持在目前的分支 git branch [Branch] [Reflog] 將特定 Reflog 建立分支,維持在目前分支 git branch -d [Branch] 刪除該分支 無法刪除當前的分支 git branch -a 大专栏  Git Command #05 分支操作 列出所有分支 包含遠端分支 git checkout git checkout [Bran

四、git学习之——分支管理、解决冲突

分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN! 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了.如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险. 现在有了分支,就不用怕了.你

git学习——远程分支

远程分支 远程分支(remote branch)是对远程仓库状态的索引.它们是一些无法移动的本地分支:只有在进行 Git 的网络活动时才会更新.远程分支就像是书签,提醒着你上次连接远程仓库时上面各分支的位置. 我们用 (远程仓库名)/(分支名) 这样的形式表示远程分支.比如我们想看看上次同 origin 仓库通讯时 master 的样子,就应该查看 origin/master 分支.如果你和同伴一起修复某个问题,但他们先推送了一个 iss53 分支到远程仓库,虽然你可能也有一个本地的 iss53

git学习 九 分支管理策略

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息. 下面我们实战一下--no-ff方式的git merge: 首先,仍然创建并切换dev分支: $ git checkout -b dev Switched to a new branch 'dev' 修改readme.txt文件,并提交一个新的commit

git 学习之分支

在一开始学习 git 的时候我们经常提到一个东西---- master.那么 master 到底是什么呢?其实它就是一个分支,一般这个分支就是主分支.而在一般 git 中都有一个指向当前你工作的分支 HEAD. 对于一开始的时候,master 分支是一条线的.对于我们每次提交的时候,git 分支都会向前移动一次,因此随着我们的提交越来越多,master 分支也越来越长.当我们创建一个新的分支(hotFix)的时候,git 会为我们创建一个新的指针(hotFix),而我们可以把当前工作的地方指向当

git学习 六 分支管理

分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN! 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了.如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险. 现在有了分支,就不用怕了.你

git clone 指定分支操作

服务器迁移,而且原来本地开发是在同一个目录中切换不同的分支,感觉有点挫,于是打算一个文件目录对应一个分支,这样不会有太大的文件差异. 记录下来本次操作,可能以后还会用到. git初始化一般是这样. git init git clone .git地址 之后重点来了,因为clone下来的一般为master分支,有可能不是想拉下来的分支.可以使用以下的方法 git branch -a 先查看当前远端分支情况 git  checkout origin/xxx  选择远端xxx分支 git branch

git学习--bug分支

如果你接到一个修复代号为1的任务,那么想创建一个分支issue-1来处理,但是,现在在dev上进行的工作还没完成,无法完成提交.如下图 则需要用git stash把工作现场先储存起来,等以后恢复现场后继续工作.如下图,执行git stash后工作区为空 首先确定要在哪个分支修复bug,假设是master,就从master创建临时分支,并在上面修复bug 修复完成后,切换到master分支,并完成合并,最后删除issue-1分支 然后,问题来了,因为dev是从原来的master拉下来的,是存在已经