Git命令学习之旅——分支

来源:互联网 发布:白金数据 东野圭吾 编辑:程序博客网 时间:2024/05/19 03:46


今天我们总结一下,Git中最为强大的一点——分支。那么什么是分支呢?

所谓分支,就是分出一个枝干,用于其他用途。

比如说,你们一个团队有3个人,要同时完成一个APP的开发,每个人负责不同的模块,那么怎么可以保证所有人都可以同时进行开发呢?

这个时候就需要引入分支的概念了,3个人,每人一个分支,分别完成,当任务完成之后就可以通过分支的合并将工作完成

那么我们应该如何建立分支呢?


首先,我们先查看我们现在所在的分支,输入命令:git branch      

可以看到我们当前处于master分支(也就是主分支),且只有一个分支

我们新建一个a.txt方便理解,其内容为:Hello Git!

接下来我们要开始今天的任务了,需要新建一个分支,输入命令:git branch 【分支名】   

之后再输入:git branch 查看可以得到下图:

发现我们新建了一个today的分支,我们现在还是处于master分支中

接下来我们需要切换到today分支中,输入命令:git checkout 【分支名】 (这里就是输入:git checkout today)

可以得到一下提示:

再查看状态的时候,就可以看到我们处于today的分支了

之后在a.txt文件后面添加working表示正在工作,如下图:


那么我们每次创建新的分支都需要这样写,然后再切换吗?

当然不是,为了偷懒,我们可以输入:git checkout -b 【分支名】  (用于创建并移动到新的分支中)

注:为了保证不会报错,切换分支之前最好保证每个分支的工作区是干净的(也就是说提交到分支,这里并没有涉及远程库,都是本地的操作)

当commit到分支之后可以分别查看master分支下的a.txt文件和today分支下的,发现只有today下的a.txt文件有“working”这一行



工作到一半,需要调试一个bug,这个时候在today分支之外再建立一个bug分支,然后调试bug,并将其commit到分支

此时a.txt内容如下:


接下来将这个bug分支和today分支合并,将刚刚调试好的bug融入到今天的进度中

我们先checkout到today分支,输入命令:git merge 【分支名】  (这里是:git merge bug   将当前分支和bug分支合并)


这个时候再查看today分支下的内容,发现和bug下的内容一样

此时已经不再需要bug分支,所以可以将其删除,输入命令:git branch -d 【分支名】

得到提示:表示分支已经删除,可以再次查看分支状态确认

当一天的任务完成之后我们可以按照相同的方法将today分支合并到master分支,最后push到远程库



以上纯属最为简单的创建合并分支,实际过程中当然没有那么简单,最常见的就是冲突!!

当你对原来的文件进行修改,或者你的两个分支对分别对一个文件进行了不同的修改之后,再想要合并的时候,就需要考虑冲突了

我们假设如下情况:

首先,在解决冲突之后,你继续在write分支下工作,突然有个补丁需要马上补上,因此你再新建了一个fix分支,并修补了补丁

其文件内容分别如下:

(正在编写)

(修补补丁)

之后你需要将补丁补入正在编写的文件中,输入:git merge fix

这个时候会出现如下提示:

这里可以通过git status 命令查看问题所在,如下图所示:

发现了问题所在之后,通过自己的编译器打开双方修改的文件(我这里是vim)

可以看到这里将两个分支所修改的内容都显示了出来

<<<<<<HEAD”以下“======”以上是本分支所修改的内容,而下面">>>>>fix"之前就是在合并分支所修改的地方,这里就可以根据自己的需要将其修改之后保存退出

之后再commit,可以得到提示:表示两个分支已经合并,之后便可以删除fix分支了

(这里的“write and fix”是我在修改a.txt文件之后,commit时候的提示信息)




之后我们可以通过:git branch -v   查看每个分支最后提交的提示内容,如下图:

便于我们了解我们在每个分支都做了什么内容

同样的我们可以输入:git branch --merged   查看与当前分支合并了的分支,如下图:

(这个是在today分支下查看的)

相对应的还可以输入:git branch --no-merged  查看与当前分支没有合并的分支,如下图:

(这个是在today分支下查看的)



Git有个非常智能的一点在于,当你的分支内容没有合并的时候,如果输入删除分支的命令,它会提醒你不要这样做,如下图:


(这个是在today分支下输入:git branch -d write)

当然你如果非要删除,可以按照提示输入:git branch -D 【分支名】




以上就是本地分支的一些操作和使用了,接下来再说一下远程分支吧

我们一般都是默认将本地的master分支推送到远程origin库中的master分支

但是当一个团队一起工作的时候,就需要建立远程分支,成员对产品的修改都在分支上实现,最后再合并到master分支上,作为最终版本

那么我们首先讲一下将本地的分支推送到远程分支

输入命令:git push 【远程库名】 【分支名】

:这里的远程库就是remote的时候链接的那个,而分支名就是新建的用于存放你的东西的文件名

例如,我将本地的today分支推送到Github上,输入:git push origin today  结果如下图:


这样就在远程库创建了today分支

当然你还可以输入:git push 【远程库名】【本地分支名】:【远程分支名】

例如,我将本地的write分支推送到一个名为read的分支上,输入:git push origin write:read  结果如下图:

此时在Github上查看,可以看到多了两个分支,分别为today和read,如下图:


当然,我们还可以将不需要的远程分支删除掉,输入命令:git push 【远程库名】 :【远程分支名】

例如,将远程的read分支删除,输入:git push origin :read

再次在Github上查看,可以看到read分支已经不在:

:这个删除命令,其实可以理解为将一个空的分支推送到read分支,并将其覆盖





最后说一下有关衍合的问题吧,其实我并没有很理解,这里就不乱说了,等以后了解了之后再做总结吧

就我现在而言,rebase和merge其实差不多都是对分支的合并,但是有一点要非常注意,那就是:一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子突然过于的兴奋不睡觉是怎么办 刚出生的宝宝听力未通过怎么办 孩子多动症被老师打不上学怎么办 小孩在校被学生打家长该怎么办? 8岁儿童好动上课不注意听课怎么办 怀孕第一个月喝了啤酒怎么办 不知道自己怀孕喝了酒怎么办 怀孕一个月不知道喝酒了怎么办 老师说孩子上课不专心听讲怎么办 二年级孩子上课不认真听讲怎么办 二年级的孩子浮躁上课不认真怎么办 三年级的小孩上课不认真听讲怎么办 大班孩子上课不专心听讲玩怎么办 老师跟家长说小孩上课讲话怎么办 别的家长动手打自己的孩子怎么办? 一岁3个月宝宝骨龄偏小怎么办 宝宝9个月了越来越粘人怎么办? 孩子突然说话结巴口吃了怎么办啊 很久不说话了不敢说话了怎么办 宝宝2岁了还不会说话怎么办 2岁的宝宝还不会说话怎么办 小宝宝有四个月了母乳不够吃怎么办 一个月的宝宝吐奶厉害怎么办 新生儿吐奶吐一次吐的特别多怎么办 把孩子打了一次现在说话结巴怎么办 宝宝五岁了口吃越来越严重了怎么办 幼儿把自己的舌头扣破皮了怎么办 6岁宝贝烧到39度怎么办 2岁半的宝宝说话结巴怎么办 2周3宝宝不会说话胆小怎么办 宝宝我2岁多了说话有点结巴怎么办 两岁宝宝说话突然结巴了怎么办 两岁3宝宝叫她名字不理人怎么办 九个月的宝宝身高不达标怎么办 3岁宝宝又吐又拉怎么办 宝宝发烧39度怎么办手脚很烫 两岁宝宝吃什么吐什么怎么办 7岁宝宝吃多了吐怎么办 7个月的宝宝大便干燥怎么办 10个月宝宝便秘大便干燥怎么办 一岁半宝宝老是拉糊糊状大便怎么办