摘要:作为码农,Git的使用就像日常生活一样,无时无刻不在使用,因此掌握Git分支管理也是很有必要的。Git分支管理几乎每个版本控制系统都支持某种形式的分支。使用分支意味着你可以从开发的主线上分支出来,继续工作而不影响主线。有人将Git的分支模型称为必杀技,也正是因为如此,它才将Git与版本控制系统家族区分开来。创建分支命令:gitbranch(branchname)切换分支命令:gitcheckout(branchname)当你切换分支时,Git会将你工作目录的内容替换为该分支最后一次提交的快照,所以多个分支不需要更多的目录.合并分支命令:gitmerge可以多次合并到统一分支,也可以选择合并后直接删除合并分支。在我们开始之前,让我们创建一个测试目录:$mkdirgitdemo$cdgitdemo/$gitinitInitializedemptyGitrepository...$touchREADME$gitaddREADME$gitcommit-m'firstversioncommit'[master(root-commit)3b58100]第一个版本提交1个文件更改,0个插入(+),0个删除(-)创建模式100644READMEGit分支管理listbrancheslistbranches基本命令:当gitbranch没有参数时,gitbranch将列出你的本地分支。$gitbranch*master这意味着我们有一个名为master的分支,该分支是当前分支。当你执行gitinit时,Git会默认为你创建master分支。如果我们想手动创建一个分支。只需执行gitbranch(branchname)。$gitbranchtesting$gitbranch*mastertesting现在我们可以看到有一个新的分支testing。当你在上次提交更新后以这种方式创建新分支时,如果你稍后提交更新然后切换到测试分支,Git会将你的工作目录恢复到你创建分支时的目录。接下来我们将演示如何切换分支,我们使用gitcheckout(branch)切换到我们要修改的分支。$lsREADME$echo'runoob.com'>test.txt$gitadd.$gitcommit-m'addtest.txt'[master3e92c19]addtest.txt1个文件已更改,1个插入(+)创建模式100644测试。txt$lsREADMEtest.txt$gitcheckouttesting切换到分支'testing'$lsREADME当我们切换到测试分支时,我们添加的新文件test.txt被删除了。当切换回master分支时,它们又出现了。$gitcheckoutmaster切换到分支'master'$lsREADMEtest.txt我们也可以使用gitcheckout-b(branchname)命令创建一个新的分支,并立即切换到这个分支,在这个分支上操作。$gitcheckout-bnewtest切换到新分支'newtest'$gitrmtest.txtrm'test.txt'$lsREADME$touchrunoob.php$gitadd.$gitcommit-am'removedtest.txt、addrunoob.php'[newtestc1501a2]removedtest.txt,addrunoob.php2fileschanged,1deletion(-)createmode100644runoob.phpdeletemode100644test.txt$lsREADMErunoob.php$gitcheckoutmaster切换到分支'master'$lsREADMEtest.txt如你所见,我们创建了一个分支,删除了分支上的一些文件test.txt,并添加了runoob.php文件,然后切换回我们的主分支,删除了test。txt文件回来了,新添加的runoob.php在master分支中不存在了。使用分支来分离工作,可以让我们在不同的开发环境中做事,来回切换。删除分支删除分支命令:gitbranch-d(branchname)比如我们要删除testing分支:$gitbranch*mastertesting$gitbranch-dtestingDeletedbranchtesting(was85fc7e7).$gitbranch*masterbranchmerge一旦一个分支有你最终会想把它合并回你的主分支。您可以使用以下命令将任何分支合并到当前分支中:0测试.txt|1-2个文件改变,1个删除(-)createmode100644runoob.phpdeletemode100644test.txt$lsREADMErunoob.php在上面的例子中,我们将newtest分支合并到主分支中,test.txt文件为删除。合并后,可以删除分支:$gitbranch-dnewtestDeletedbranchnewtest(wasc1501a2)。删除后只剩下master分支:$gitbranch*master合并冲突合并不仅仅是简单的文件添加,moveGit也会合并改动。$gitbranch*master$catrunoob.php首先,我们创建一个名为change_site的分支,切换过去,我们将runoob.php的内容更改为:创建一个change_site分支:$gitcheckout-bchange_site切换到一个新的分支'change_site'$vimrunoob.php$head-3runoob.php$gitcommit-am'changedtherunoob.php'[change_site7774248]改变了runoob.php1个文件更改,3个插入(+)将修改的内容提交到change_site分支。现在,如果我们切换回master分支,我们可以看到内容恢复到我们之前的状态(空文件,没有代码),我们再次修改runoob.php文件。$gitcheckoutmaster切换到'master'分支$catrunoob.php$vimrunoob.php#修改后的内容如下$catrunoob.php$gitdiff--gita/runoob.phpb/runoob。phpindexe69de29..ac60739100644---a/runoob.php+++b/runoob.php@@-0,0+1,3@@+$gitcommit-am'修改code'[masterc68142b]Modifycode1filechanged,3insertions(+)这些改动现在记录在我的“master”分支中。接下来我们合并“change_site”分支。$gitmergechange_siteAuto-mergingrunoob.phpCONFLICT(content):Mergeconflictinrunoob.phpAutomaticmergefailed;修复冲突,然后提交结果。$catrunoob.php#打开文件,查看冲突内容>>>>>>change_site?>我们将之前的分支合并到master分支中,出现合并冲突,需要手动修改。$vimrunoob.php$catrunoob.php$gitdiff--ccrunoob.phpindexac60739,b63d7d7..0000000---a/runoob.php+++b/runoob.php@@@-1,3-1,3+1,4@@@在Git中,我们可以使用gitadd告诉Git文件冲突已经解决$gitstatus-sUUrunoob.php$gitaddrunoob.php$gitstatus-sMrunoob.php$gitcommit[master88afe0e]Mergebranch'change_site'现在我们成功解决了合并中的冲突并提交了结果。本文分享自华为云社区《Git 分支管理》,原作者:雨川。点击关注,第一时间了解华为云的新鲜技术~
