一、合并远程分支merge
任务描述
在软件开发中,通常会在版本库中创建多个不同的分支进行开发。例如,最基本的可以有一个测试版分支和一个正式版分支,其中测试版分支用来完成最新功能代码的开发与测试,正式版则用于管理即将发布的版本。
如果某个版本通过了测试,就需要将其推到正式产品线上去。将测试版推送到正式版的一个做法,就是将远程仓库测试版的分支代码,合并到正式版的分支代码中去,这就对应着远程分支合并的操作。
本关任务:合并远程指定的分支。
相关知识
合并远程分支的一般步骤是:
第一步,分别获取远程分支内容到本地;
第二步,在本地将两个分支合并;
第三步,将合并后的本地分支推送到远程分支,完成合并。
具体的,以将远程
develop
分支合并到远程master
分支为例,操作过程如下:
获取远程
develop
分支到本地分支(如develop
分支)。如果本地已经有分支对应远程develop
分支,则可以直接在该分支上执行pull
操作或者fetch/merge
操作,以获取远程最新内容。否则,可以新建分支跟踪远程develop
分支,并获取最新内容到本地;切换到
master
分支,并获取远程master
分支的最新内容到本地;将本地
develop
分支合并到本地master
分支;将本地
master
分支推送到远程master
分支。以合并远程
develop
分支到远程master
分支为例,其具体操作步骤如下:#切换到develop分支git checkout develop#获取远程develop分支的内容到本地git pull origin develop:develop#切换到master分支git checkout master#拉取远程master分支内容到本地git pull origin master#合并本地develop分支到master分支git merge develop#将合并后的分支推送到远程master分支git push origin master:master
编程要求
平台已经为你准备了本地版本库
repo
,且已添加远程仓库/tmp/origin
,并将远程主机命名为origin
。本地版本库已有master
分支和develop
分支,两个分支均有已提交的内容,且本地版本库当前处于develop
分支。本关的编程任务是,补全右侧代码片段中
Begin
至End
中间的脚本,合并远程develop
分支到远程master
分支。
#进入本地版本库cd repo#请在下方Begin/End星号线内填写git命令以将远程develop分支合并到远程master分支#********** Begin **********#git checkout developgit pull origin develop:developgit checkout mastergit pull origin mastergit merge developgit push origin master:master#********** End **********#
二、rebase操作
任务描述
合并不同分支,除了使用
merge
操作之外,还可以使用rebase
操作。相比于merge
操作,使用rebase
会使分支树更为清晰、干净。本关任务:完成
rebase
操作。merge和rebase的不同
merge
的工作流程如下图:如上图所示,我们从远程仓库
origin
的C2
版本,创建一个新的分支develop
进行开发,并进行了C5
、C6
两次提交。之后团队中其他成员又向origin
推送了两次提交C3
、C4
。为了合并远程分支上的新内容到本地,我们进行merge
操作,将内容合并到develop
之后,生成了一次新的提交C7
。此时,develop
分支还是一个独立的分支。而
rebase
的工作流程如下图:
rebase
又可称为‘变基’,结合上图的话,这个词就很容易理解了。即:
C5
、C6
本来是在C2
这次提交的基础上进行修改的;现在我们将这个‘基础’改为
C4
,即将C5
、C6
的提交作用到C4
上去;在这个过程中,可能会有冲突产生,解决冲突之后就完成了
rebase
。由图可以看到,
rebase
完成后,源分支上的提交都不见了。rebase基础操作
rebase
的基本操作是将某个分支的修改到指定分支,其命令格式为:git rebase 基分支 源分支
其中‘基分支’是我们的新的‘基’,而‘源分支’就是需要进行变基操作的分支。这样就能实现将源分支变基到基分支。具体使用示例如下:
git rebase master develop
以上语句就能实现将
develop
变基到master
分支。 如果是将当前分支变基到指定分支,则可以直接使用:git rebase 基分支
这一命令默认将当前分支变基到‘基分支’。如果当前处于
develop
分支,则其使用示例如下:git rebase master
这样也能实现将当前的
develop
分支rebase
到master
分支。由于变基是将修改作用到一个不同的版本上,因此很可能在
rebase
的过程中出现冲突。和merge
一次性合并所有冲突不同的是,rebase
的冲突是一个一个解决的。以上图中的rebase
操作为例,需要分别解决和C3
、C4
的冲突。在解决rebase
冲突的过程中,当解决完一个冲突的时候,使用如下命令后,才会出现下一个冲突:git add -u git rebase --continue
冲突全部解决完后,
rebase
操作就完成了。 如果在解决冲突的过程中,想放弃rebase
操作,则可以使用如下命令撤销rebase
操作:git rebase --abort
这样就能退出
rebase
,并回退到rebase
前的状态。编程要求
平台已经为你准备了本地版本库
gitTraining
,并创建了两个分支master
和develop
,且当前处于develop
分支。并且,develop
分支是从master
分支,checkout
出去的分支。本关的编程任务是,补全右侧代码片段中
Begin
至End
中间的脚本,将develop
变基到master
分支。
#进入本地gitTraining版本库cd gitTraining#请在下方Begin/End星号线内填写Git命令以完成rebase操作#********** Begin **********#git checkout developgit rebase master#********** End **********#
三、储藏之保存git stash
任务描述
在开发过程中,当你的开发分支处于一个比较杂乱的状态,而你想转到其他分支上进行另外一些工作。但是,你不想提交进行了一半的工作,也不想将其撤销,这时就可以使用储藏操作。当你完成工作之后,再次回到该分支,可以恢复储藏的内容。然后,就会将之前保存的内容,再次恢复到工作区,就能继续进行开发。
本关任务:储藏当前工作区中的内容。
相关知识
储藏的概念
“储藏”可以获取你工作目录的中间状态(包括修改过的被追踪的文件和已经暂存的变更),并将其保存到一个未完结变更的堆栈中,而且随时可以重新应用。当你不想提交,也不想丢弃当前工作区中的内容,而想切换到其他分支的时候,可以使用储藏命令先暂存工作区中的内容。然后,再回到当前分支的时候,将储藏起来的内容,恢复到工作区之后,即可恢复之前的工作。
储藏的基本操作
储藏分为保存和应用两个部分。保存就是将当前工作区的内容保存到一个栈中,而应用就是重新应用被保存的工作。
保存
保存用到的命令是
git stash
,只需在当前分支执行此命令,即可将当前工作区的内容保存起来。如你在本地版本库创建了helloGit
文件,此时查看工作区状态可以得到如下所示提示:当你执行
git stash
命令,将工作区保存起来之后,再次查看可以得到如下提示此时已经将工作区内容保存了起来,所以才会提示工作区是干净(
clean
)的。重新应用
当你需要再次应用被保存的内容的时候,只需执行
git stash apply
即可。 因为可能执行了多次保存,所以你需要查看已经保存起来的内容有哪些。查看已经保存的工作的命令如下:git stash list
会得到类似于如下输出:
如果要应用指定的储藏,则可以使用命令
git stash apply 储藏标识
这里的
储藏标识
就是git stash list
中显示的类似于stash@{0}
的字符串。如git stash apply stash@{2}
这样就重新应用了第二次储藏。如果不加储藏标识,就默认应用最近的储藏:
git stash apply
上述命令就重新应用了最近的一次储藏。
编程要求
平台已经为你准备了本地版本库,在进行了一次提交之后,又在工作区添加了一个名为
hello
的文件,版本库当前分支是master
。本关的编程任务是补全右侧代码片段中
Begin
至End
中间的脚本,储藏工作区内容。
#进入本地版本库cd gitTraining#请在下方Begin/End星号线内填写Git命令以完成储藏操作#********** Begin **********#git stash save "Add hello file"#********** End **********#
四、储藏之恢复git stash apply
任务描述
在开发过程中,当你的开发分支处于一个比较杂乱的状态,而你想转到其他分支上进行另外一些工作。但是,你不想提交进行了一半的工作,也不想将其撤销,这时就可以使用储藏操作。当你完成工作之后,再次回到该分支,可以恢复储藏的内容。然后,就会将之前保存的内容,再次恢复到工作区,就能继续进行开发。
本关任务:恢复被储藏的工作区的内容。
编程要求
平台已经为你准备了本地版本库,在进行了一次提交之后,又在工作区添加了一个名为
hello
的文件,然后将其储藏了起来。版本库当前分支是master
。本关的编程任务是,补全右侧代码片段中
Begin
至End
中间的脚本,恢复最近一次储藏。
#进入本地版本库cd gitTraining#请在下方Begin/End星号线内填写Git命令以完成恢复操作#********** Begin **********#git stash apply#********** End **********#