git自学宝典——分支

前文回顾



分支是多人开发的核心,也是个人开发中经常使用的东西,那么什么是分支呢?在前文多数命令中,经常用到两个参数master和head,master是创建仓库时给出的主分支;head是一个指针,指向master分支。在git系统中,其两个指针分布如下所示:

在这里插入图片描述
上图就是我们操作git系统时的意会图。那么分支究竟是个什么东西呢?
来,先给个官方解释:地址
其次,给出我的解释:分支说白了就是副本,用来控制开发的。就这么一句话,没别的。为甚说他是副本呢?因为分支都是从另一个分支分出来的,就像树一样,每个树枝都依赖另一个树枝,树干就是master。而从一个分支分出来的另外一个分支,分出来的分支完全拥有母分支内容。举个例子来说,A分支分出了一个B分支,B分支内容与A分支内容相同,但是二者内容相互独立。操作仓库是分支,但操作分支的却是head指针,所以head指针控制着开发进程。
为了便于读者理解,给出一个举例图如下:
在这里插入图片描述
上述图中copy分支是master分支分出来的,指向的是第三次提交,head指针指向的分支就是当前工作的分支。如上图中,head切换指向copy分支,修改本地仓库内容后再提交就会发生如下图情况。

在这里插入图片描述
看上图就知道操作本地仓库时,操作的永远是head指针指向的那个分支。在多人开发中,master分支是不允许随意操作的,操作的都是从master分支分出来的分支。给出示例图如下:
在这里插入图片描述
每个人开发的进度不一样,个人开发中也可以控制自己的进度,这就是分支的好处。如果等到要自己提交工作时,可以将自己的分支合并到主分支。合并示意图如下:
在这里插入图片描述
合并后,可以删除copy分支,也可以不删除copy分支。上述情况中,master分支后就没有再进行别的操作,操作的是copy分支,合并时就是将master分支指向copy。那换一种情况呢?比如copy和master都同时开发呢?其实很简单,就是将你开发的所有内容归为一个分支就行了。
举个例子,假设你在A分支上创建了一个a.txt文件,又在B分支上创建了一个b.txt文件,将B分支合并到A分支上,就是将b.txt文件添加到A分支上就行了。
再换个情况,假如你在A分支上工作,A分支中本身拥有一个demo.txt文件。你又在A分支的基础上创建了一个B分支,前文说过,分支就是copy,所以B分支也拥有demo.txt文件。你在A分支上的demo.txt文件中写了一段内容,又在B分支中demo.txt文件写了一段内容。然后再将A和B分支合并,这就会造成demo.txt文件内容冲突,到底是用A分支的demo.txt文件呢?还是用B分支的demo.txt文件呢?这种情况在分支合并操作中称为合并冲突。解决冲突一般靠手动解决,你可以删除两个文件中的一个,也可以在本地将文件内容合并,然后删除某个分支中的文件,然后合并。


分支我是讲完了,下来实操一次,方便读者理解。 本次实操回顾前文的一切操作,从克隆仓库,到最后同步到远程仓库为止。


步骤一:克隆远程仓库demo

在本地需要克隆仓库的目录下输入如下命令:

git clone url

执行结果如下图所示:
在这里插入图片描述
注:克隆远程仓库命令为"git clone url"

步骤二:创建并切换分支

输入如下命令创建分支:

git checkout -b branchName
#加上修饰符-b,则表示创建后直接切换到创建分支

执行结果如下图所示:
在这里插入图片描述
注:关于分支创建和切换的命令如下:

  1. git checkout branchName:以当前分支为母本,创建一个分支,但不切换至所创建分支
  2. git checkout branchName和git switch branchName:切换到branchName分支(个人建议切换分支的时候,采用git switch命令)
  3. git checkout -b 或者git switch -c :以当前分支为母本,创建并切换分支


步骤三:查看分支状态

输入如下命令查看分支状态:

git branch

执行结果如下图所示:

在这里插入图片描述
其中带“*”号的表示当前操作分支,上述输出表示当前正在操作分支为copy。


步骤四:提交分支工作

打开本地仓库,修改本地仓库demo.txt文件内容如下:

this is copy branch
#主分支中,demo.txt文件是空的

将copy分支工作提交到本地仓库,输入如下命令:

git add *
git commit -m “operation copy”

执行结果如下图所示:
在这里插入图片描述
切换到主分支,输入如下命令:

git switch master

执行结果如下图所示:
在这里插入图片描述
回过头来,查看master分支下的demo.txt文件,其文件内容为空,这就证明了分支的内容独立性。

步骤五:合并分支

将copy分支合并到master分支上,需要先切换到master分支上,然后使用如下命令将copy分支合并到master分支上:

git merge copy

执行结果如下图所示:
在这里插入图片描述
回过头来,查看本地仓库的demo.txt文件,其内容如下:

this is copy branch

上述图片中,fast-forward表示合并模式是快速合并,在此模式下删除分支会丢失分支信息。还有其他模式,最常用的是-m,表示禁用快速模式,并合并后删除分支不会丢失分支信息。在“禁用快速合并模式”的情况下,其合并等同于一次分支工作提交,即commit,所以需要加上注释信息。
由于copy分支还未删除,所以可以演示“禁用快速合并模式”的合并情况,输入如下指:

git merge -m “demo merge copy in no_fast condition” copy
#有的git版本和git教程给出的禁用快速合并模式的修饰符是“–no-ff”;
#读者可以在dos窗口下输入git merge --help查看所有修饰符作用。

执行结果如下:
在这里插入图片描述
提示到已经最新,但实际上如果没有前面的快速合并,则不会显示如图内容。


步骤六:删除分支

删除copy分支,输入如下命令:

git branch -d copy

执行结果如下所示:
在这里插入图片描述
步骤七:将本地仓库同步到远程仓库
前文已经给远程demo仓库绑定了SSH密钥,且用git remote -u origin master命令和远程仓库绑定了,所以可以直接使用git push实现推送。


本章讲了什么是分支,分支的操作,以及分支的用途。同时本章演示了一遍前面讲的所有东西,用来巩固所学所识。下一章,我们继续讲分支,不过我们将的是如何在远程仓库创建分支,如何将本地分支内容推送到远程仓库,如何控制多人协作状态下,分支提交冲突问题。



欲知后事如何,且听下回分解。

有钱的赏个钱场,没钱的赏个人场。良某人谢过了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值