千家信息网

Git分支管理——创建、合并、删除分支

发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,前言:几乎所有的版本控制都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。Git的分支模型成称为它的"必杀技特性",也正因为这一特性,使得Git从众多版本控制
千家信息网最后更新 2024年11月27日Git分支管理——创建、合并、删除分支

前言:

几乎所有的版本控制都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。

Git的分支模型成称为它的"必杀技特性",也正因为这一特性,使得Git从众多版本控制系统中脱颖而出。Git处理分支的方式是难以置信的轻量,创建新的分支这一操作是秒级完成的,并且在不同分支之间的切换操作也是一样便捷。

Git的分支,其实本质上仅仅是指向提交对象的可变指针。Git的默认分支是master。在多次提交操作之后,其实我们已经有一个指向最后那个提交对象的master分支。他会在每次的提交操作中自动向前移动。

实际工作中我们可能会遇到一个下面这个情况:

  • 开发某个网站。
  • 为实现某个新的需求,创建一个分支。
  • 在这个分支上开展工作。
  • 正在此时,你突然接到一个电话说有个很严重的问题需要紧急修补。 你将按照如下方式来处理:
  • 切换到你的线上分支(production branch)。
  • 为这个紧急任务新建一个分支,并在其中修复它。
  • 在测试通过之后,切换回线上分支,然后合并这个修补分支,最后将改动推送到线上分支。
  • 修改后切换回你最初工作的分支上,继续工作。

关于git的更多介绍,还是移步其官方文档吧!


博文大纲:
1、初始化一个目录并声明用户及邮箱地址
2、创建、快速合并及删除分支
3、解决分支冲突问题
4、关闭快速合并
5、Bug分支
6、Git分支管理相关命令

1、初始化一个目录并声明用户及邮箱地址

[root@git ll]# git init[root@git ll]# git config --global user.name admin[root@git ll]# git config --global user.email admin@admin.com

2、创建、快速合并及删除分支

[root@git ll]# echo "aaaa" > branch.txt[root@git ll]# git add branch.txt[root@git ll]# git commit -m "第一次提交 From master"#创建一个分支并进入新建的分支[root@git ll]# git checkout -b dev[root@git ll]# git branch       #查看当前所在分支* dev           #星号所在的列就是当前所在分支  master#在dev分支更新文件并提交[root@git ll]# echo "bbbb" >> branch.txt [root@git ll]# git add *[root@git ll]# git commit -m "commit From dev branch"[root@git ll]# cat branch.txt      #确认当前内容aaaabbbb[root@git ll]# git checkout master       #切换到master分支[root@git ll]# cat branch.txt       #确认当前内容aaaa[root@git ll]# git merge dev        #合并dev分支[root@git ll]# cat branch.txt    #再次查看其内容aaaabbbb[root@git ll]# git log --graph --pretty=oneline --abbrev-commit   #查看提交日志#可以查看到其提交日志前面的星号是在同列的,这是因为采用的是快速合并的方法(默认)#稍后会写下关闭快速合并,然后可以对比该命令查看的结果* bc8bd7b commit From dev branch* 8bb6874 第一次提交 From master[root@git ll]# git branch -d dev       #删除dev分支

3、解决分支冲突问题

在我们实际工作中会遇到一个分支冲突的问题,就是当你在工作分支dev下对文件内容进行了修改,然后在你提交到版本库前,master分支下的内容已经发生了改变,此时,你dev分支下的内容是比master下的内容要旧,这种情况下进行分支合并,会有一个分支冲突的概念,栗子如下:

[root@git ll]# cat branch.txt      #查看master分支的此文件内容aaaa[root@git ll]# git checkout -b dev        #创建并切换至自己的工作分支 #对文件内容进行修改并提交到版本库[root@git ll]# echo "bbbb" >> branch.txt   [root@git ll]# git add branch.txt[root@git ll]# git commit -m "alter from dev"[root@git ll]# cat branch.txt     #查看文件内容aaaabbbb[root@git ll]# git checkout master     #切换至master[root@git ll]# cat branch.txt      #master下的文件内容还是原来的aaaa#修改master下的文件内容并提交[root@git ll]# echo "cccc" >> branch.txt [root@git ll]# git add branch.txt[root@git ll]# git commit -m "alter from master"[root@git ll]# cat branch.txt     #此时master下的文件内容如下aaaacccc#接下来将dev分支进行合并:[root@git ll]# git merge dev        #返回如下报错信息,说有冲突自动合并 branch.txt冲突(内容):合并冲突于 branch.txt自动合并失败,修正冲突然后提交修正的结果。#解决合并冲突#其实有上述报错后,dev分支下的内容已经存在了master目录下的文件中,只是没有提交而已,提交即可#但是工作中不建议直接提交,因为内容有些特殊的地方[root@git ll]# vim branch.txt       #此时文件的内容如下aaaa<<<<<<< HEADcccc=======bbbb>>>>>>> dev[root@git ll]# cat branch.txt   #将冲突报错产生的特殊符号删除再提交aaaaccccbbbb[root@git ll]# git add branch.txt[root@git ll]# git commit -m "冲突已解决"[root@git ll]# git log --graph --pretty=oneline --abbrev-commit   #查看分支合并情况*   da2bcdb 冲突已解决|\  | * 6abac82 alter from dev* | 2b5d2f0 alter from master|/  * ef014ec alter from master

4、关闭快速合并

在上面说到,在查看git版本的提交历史时,其分支结构表现的不是那么直观,那是因为默认开启了快速合并的选项,这里写下如何关闭快速合并。

#进入分支,修改文件内容,并提交[root@git ll]# git checkout -b dev[root@git ll]# echo "ffff" >> branch.txt [root@git ll]# git add branch.txt[root@git ll]# git commit -m "关闭快速合并"#切换至master分支,进行合并[root@git ll]# git checkout master [root@git ll]# git merge --no-ff -m "分支合并说明" dev    #选项"--no--ff"就是关闭快速合并[root@git ll]# git log --graph --pretty=oneline --abbrev-commit #再次查看提交日志,*   38c4fad Merge branch 'dev'|\  | * 9233297 关闭快速合并|/  *   7e0ea1b 冲突已解决    #从这里开始向上看,可以看到是经过一个分支才提交的|\  | * f9180c9 alter from dev* | 107081a alter from branch/bug|/  #以下是最初没有关闭快速合并的分支合并操作,可以看到只有一列星号,而不显示分支* bc8bd7b commit From dev branch          * 8bb6874 第一次提交 From master[root@git ll]# git branch -d dev       #删除dev分支

5、Bug分支

开发人员在开发过程中,bug就像家常便饭一样,有了bug就要修复,在git中,由于分支是强大的,所以都可以通过一个新的临时分支来修复bug,修复后,分支合并,然后将临时分支删除。

当我们接到一个修改bug的任务后,很自然的想要创建一个分支来修复它,但是当前正在进行的工作进行到一半,还无法提交,但又需要马上修复bug,此时,可以通过git提供的stash功能,可以把当前工作区"储藏"起来,等以后恢复现场后继续工作。

工作进行到一半时工作区的状态如下:
[root@git ll]# cat branch.txt aaaaccccbbbb[root@git ll]# echo "dddd" >> branch.txt [root@git ll]# git status     #提示修改但是尚未提交# 位于分支 dev# 尚未暂存以备提交的变更:#   (使用 "git add ..." 更新要提交的内容)#   (使用 "git checkout -- ..." 丢弃工作区的改动)##   修改:      branch.txt#修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
将此时的工作区隐藏起来
[root@git ll]# git stash        #就是这条命令,可以将当前工作区隐藏[root@git ll]# git status        #再次查看当前工作区,就是干净的了# 位于分支 dev无文件要提交,干净的工作区[root@git ll]# cat branch.txt       #文件也没有我们新加的内容aaaaccccbbbb
假设在master分支上修复bug
#切换至master分支并进入bug分支修改[root@git ll]# git checkout master [root@git ll]# git checkout -b bug[root@git ll]# echo "eeee" >> branch.txt [root@git ll]# git add branch.txt[root@git ll]# git commit -m "alter from bug"#切换至master分支合并修改后的bug分支[root@git ll]# git checkout master [root@git ll]# git merge bug [root@git ll]# cat branch.txt       #合并后的文件内容如下aaaaccccbbbbeeee[root@git ll]# git branch -d bug      #删除bug分支#回到dev分支恢复之前修改的内容继续自己的工作#有两种恢复方法:#一是使用 git stash apply 恢复,但是恢复后,stash 内容并不删除,需要用 git stash drop 来删除;#另一种方式是用 git stash pop,恢复的同时把 stash 内容也删了;这里我采用第二种方法[root@git ll]# git stash pop        #恢复存储区的内容[root@git ll]# cat branch.txt     #我们之前的内容又回来了aaaaccccbbbbdddd#最后工作完成,在合并dev分支的时候,也会有分支冲突,可以参考前面解决分支冲突的方法

6、Git分支管理相关命令

[root@git ll]# git checkout -b ops    #创建ops分支并切换到ops分支[root@git ll]# git checkout master     #切换至master分支[root@git ll]# git merge dev     #快速合并dev分区到当前分支[root@git ll]# git branch -d ui       #删除ui分支[root@git ll]# git branch        #查看所在分支(用星号表示所在分支)[root@git ll]# git log --graph --pretty=oneline --abbrev-commit #查看分支合并图[root@git ll]# git merge --no-ff -m "合并时提交信息" dev   #不使用快速合并分支[root@git ll]# git stash        #将当前版本库的状态临时存储[root@git ll]# git stash pop   #恢复并删除临时存储的信息[root@git ll]# git stash apply    #恢复临时存储信息,但不删除信息[root@git ll]# git stash drop     #删除临时存储中的信息[root@git ll]# git stash show     #查看临时存储的信息[root@git ll]# git branch -D dev       #强制删除一个分支[root@git ll]# git remote       #查看当前版本库是否属于远程版本库[root@git ll]# git remote -v    #查看远程版本库的详细信息[root@git ll]# git push origin dev     #将本地dev分支推送到远程仓库[root@git ll]# git checkout -b dev origin/dev   #创建本地dev分支并关联到远程仓库的dev分支[root@git ll]# git pull    #抓取远程分支,一般用于解决冲突[root@git ll]# git branch --set-upstream-to=origin/dev dev   #将本地分支dev关联到远程仓库的dev分支
0