Git命令学习之旅——分支


今天我们总结一下,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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值