一、创建本地分支-git branch
任务描述
当你进入一个团队,在获得产品的完整代码之后,你首先要做的就是,在本地创建一个属于自己的分支,然后才能在自己的分支上进行开发。
本关任务:在本地仓库创建一个新的分支,并切换到该新分支,然后添加指定文件到本地仓库。
相关知识
当初始化一个版本库并进行第一次提交的时候,如果没有创建指定分支,并切换到该分支,
commit
操作默认会在本地创建master
分支,并将内容提交到master
分支。一般我们会在版本库中维护一个master
分支,如下图所示:我们在
master
分支上,进行了C1
、C2
、C3
三次提交,且当前指针指向C3
提交。一般情况下,我们只会将已经成熟的代码存放到
master
分支,而将正在开发的代码或者测试版的代码放到其他分支。这时,我们就需要新建分支,以在该分支进行开发。如下图:当我们在主分支进行了
C2
提交后,新建了develop
分支,并在其上进行了两次提交。此时,工作区指针HEAD
指向develop
分支。 创建本地分支用到的命令是git branch
,而分支切换用到的命令是git checkout
。git checkout
是有很多用途的命令,在这里我们只讲它在分支操作中的使用。下面我们详细介绍这两个命令的使用。
- 分支切换 可以使用
git checkout
命令切换到其他分支。如你本地有master
分支和develop
分支,目前你正处于develop
分支进行开发,现在你想切换到master
去,则可以执行下面的操作:git checkout master
这样就能切换到master
分支继续进行开发。
- 创建新的分支 当你需要创建一个新的分支的时候,可以使用
git branch
命令,其具体使用格式为:git branch 新的分支名字
使用示例如下:#创建名为new_branch的新分支 git branch new_branch
- 创建新分支的同时切换 切换到一个新的分支,有一个更为简洁的命令:
git checkout -b
,它的使用格式为:git checkout -b 新的分支 名字
其具体使用方法如下:git checkout -b new_branch
这样就可以创建,并切换到了new_branch
分支。
#创建gitTraining文件夹
mkdir gitTraining
#进入gitTraining文件夹
cd gitTraining
#将gitTraining初始化为一个本地仓库
git init
#请在下面的Bein/End星号线内,使用简洁的命令,新建gitTraining分支并切换到该分支
#********** Begin **********#
git checkout -b gitTraining
#********** End **********#
#创建helloGit.txt文件
touch helloGit.txt
#添加到暂存区
git add helloGit.txt
#提交到本地仓库
git commit -m "添加helloGit.txt"
二、删除本地分支 git branch -D
任务描述
在开发过程中,很可能出现的一个情况是:你为了解决一个紧急
bug
,而临时创建了一个分支或者分支过于混乱需要丢弃。这时你就需要进行分支删除操作。本关任务:删除本地分支。
相关知识
现在我们来看一个实际的例子。请看下图:
首先,我们在
master
工作到C1
,然后开始一个新分支develop
分支,做为测试版的代码分支。提交到C5
的时候,又需要临时解决一个问题,于是从C5
的地方又分出一个分支issue
。提交到C7
的时候,该issue
被解决。issue
分支已经失去其意义,则需要将其删除,以保持本地版本库分支树的干净。我们将issue
分支上的代码,合并到develop
上之后,就可将issue
分支删除。删除issue
分支后的分支树如下:其中,
C8
为合并issue
分支所进行的提交。删除本地分支,需要用到
git branch
命令,且需要-D
参数,具体命令格式为:git branch -D 需要删除的分支的名字
具体使用示例如下:
#删除develop分支 git branch -D develop
示例中的命令,能够将本地分支
develop
删除。编程要求
本关的编程任务是,补全右侧代码片段中
Begin
至End
中间的脚本,进入gitTraining
本地仓库,删除git
分支。平台已经为你准备了gitTraining
本地仓库,其中有两个分支:master
和git
,且版本库当前处于master
分支。
#进入本地仓库目录
cd gitTraining
#请在下方Begin至End星号线内填写git命令以删除git分支
#********** Begin **********#
git branch -D git
#********** End **********#
三、删除远程分支
任务描述
在开发过程中,有时可能由于产品变更,或者版本变更,而需要丢弃远程版本库中某个分支的内容。这个时候,你就需要一系列操作,来确保安全有效地删除远程分支。
本关任务:删除远程版本库中的某个分支。
相关知识
删除分支用到的
git
命令是git push
,在具体的使用过程中有不同的用法。
- 通过推送空分支到远程分支,实现删除。 一个删除远程分支的方法是,推送一个空分支到远程指定分支,以实现删除。推送本地分支到远程分支的方法是:
git push 远程主机名 本地分支:远程分支
- 与之类似,推送空分支实现删除的方法是:
git push 远程主机名 :远程分支
即:
前没有指定本地分支名。具体的使用示例如下:#删除远程develop分支,其中origin为远程仓库名 git push origin :develop
- 通过
delete
参数删除远程分支: 除了推送空分支到远程分支外,也可以通过delete
参数实现删除。具体的命令格式为:git push 远程主机名 --delete 远程分支名
具体使用示例如下:#删除远程develop分支,其中origin为远程主机名 git push origin --delete develop
编程要求
本关的编程任务是,补全右侧代码片段中
Begin
至End
中间的脚本,删除远程git
分支。平台已经准备了一个本地版本库gitTraining
,且已将/tmp/educoder.git
添加为远程仓库,并将其命名为origin
,本地和远程均已创建git
、master
分支。
#进入gitTraining
cd gitTraining
#请在下方Begin至End星号线内填写git命令以删除远程git分支
#********** Begin **********#
git push origin --delete git
#********** End **********#
#进入gitTraining
cd gitTraining
#请在下方Begin至End星号线内填写git命令以删除远程git分支
#********** Begin **********#
git push origin :git
#********** End **********#
四、本地分支合并 git merge
任务描述
在协作开发中,团队中每个人可能都只负责一个模块。所以,很有可能,你在开发过程中,需要用到别人所开发的功能。这个时候就需要将别人分支的内容,合并到你自己的分支;或者,
develop
分支或者master
分支有更新,你也需要将它们的修改,合并到你的分支,以跟上产品开发进程;也有可能你为了解决一个bug
,创建临时分支,完成开发后,需要将其合并到你的分支。这些都需要分支合并的知识。本关任务:合并本地分支的内容。
分支合并需要用到
git merge
命令,具体的命令格式为:git merge 需要合并的分支
在具体使用中,如当前处于
master
分支,需要将develop
分支合并到master
分支,则具体的使用方式如下:git merge develop
同时,分支合并也分为正常合并和快进式合并,通过为
git merge
添加参数,即可实现不同操作。
- 快进式合并 默认情况下,
Git
执行"快进式合并",即fast-farward merge
,会直接将被合并的分支指向需要合并的分支。如下图:
当需要将右侧分支(
develop
)合并到左侧分支(master
)时,master
分支会生成一个指针,直接指向develop
。快进式合并为默认合并方式,不需要添加任何其他参数,使用git merge 需要合并的分支
即可完成。
- 当需要将右侧分支(
develop
)合并到左侧分支(master
)时,master
分支会生成一个指针,直接指向develop
。快进式合并为默认合并方式,不需要添加任何其他参数,使用git merge 需要合并的分支
即可完成。如图所示,
Master
分支上产生了一次新的提交,也就是说生成一个新节点完成了合并,这样的话,版本演进更清晰。下面我们以一个具体的例子,来演示一下这两种合并方式的区别:
- 创建
master
分支,并在其上提交hello
文件;- 从
master
分支切换到新分支develop
,并进行两次提交,分别将hello1
、hello2
两个文件提交到develop
分支;- 切换回
master
分支,执行git merge develop
进行快进式合并,然后查看master
分支的日志,得到如下提示信息:如上图可知,master
分支多了develop
分支上的两次提交信息。- 将
master
分支回退到合并前状态,再次执行git merge --no-ff develop
,进行非快进式合并,然后再次查看日志:可见,
master
分支发生了分叉,且master
多了一次提交。通过以上分析,两种合并方式的区别就很明显了。
编程要求
本关的编程任务是,补全右侧代码片段中
Begin
至End
中间的代码,将git
分支以快进式方式合并到master
分支。平台已准备了gitTraining
版本库,并在本地创建了master
和git
分支,且当前处于master
分支。
#进入gitTraining目录
cd gitTraining
#请在下方Begin至End星号线内填写git命令以合并git分支内容到master分支
#********** Begin **********#
git merge git
#********** End **********#