Git 分支管理详解

这篇具有很好参考价值的文章主要介绍了Git 分支管理详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.前言 

我们先来说一个简单的案例吧,你们团队中有多个人再开发一下项目,一同事再开发一个新的功能,需要一周时间完成,他写了其中的30%还没有写完,如果他提 交了这个版本,那么团队中的其它人就不能继续开发了。但是等到他全部写完再全部提交,大家又看不到他的开发进度,也不能继续干活,这如何是好呢? 

对于上面的这个问题,我们就可以用分支管理的办法来解决,一同事开发新功能他可以创建一个属于他自己的分支,其它同事暂时看不到,继续在开发分支(一般都 有多个分支)上干活,他在自己的分支上干活,等他全部开发完成,再一次性的合并到开发分支上,这样我们既可知道他的开发进度,又不影响大家干活,是不是很 方便呢? 

分支本质上其实就是一个指向某次提交的可变指针。Git 的默认分支名字为 master 。而我们是怎么知道当前处于哪个分支当中呢?答案就是在于 HEAD 这个十分特殊的指针,它专门用于指向于本地分支中的当前分支。我们可以简单理解为:commit <- branch <- HEAD (注,本来我们详细说一下HEAD的,这个东西真不好说,goole了一下也没几个大神说这个。下面我就通过讲解帮助大家理解,简单的说HEAD就 是指向于本地分支中的当前分支,如下图:) 下面我们来创建分支。 

2.创建分支 

当我们需要调试某个Bug或者尝试添加或修改程序中的某个模块,而又不能影响主分支的开发时。就可以通过创建分支来满足需求。创建分支相当于是创建一个新的分支指针指向当前所在的提交。我们在Commit3上创建dev分支: 

Git 分支管理详解

如下图所示,dev分支指向Commit3。 

Git 分支管理详解

从上图可知,虽然我们创建了一个新分支,但是 HEAD 仍然指向 master 。如果希望在创建分支的同时切换到新分支上,我们可以通过以下命令实现: 

Git 分支管理详解

git checkout命令加上-b参数表示创建并切换分支上。 

3.切换分支 

切换当前分支我们可以用以下命令实现: 

Git 分支管理详解

git branch -a 命令可以查看所有分支,现在我们HEAD指针便指向dev分支,大家可以在上图中看到dev分支上有个*号。 

Git 分支管理详解

下面我们修改一下readme.txt中的内容,并在dev分支上提交一下。如下图: 

Git 分支管理详解

用流程图演示上述过程如下: 

Git 分支管理详解

现在我们在dev分支上完成工作,现在到master分支上。如下图: 

Git 分支管理详解

流程图表示如下: 

Git 分支管理详解

切换回master分支后,再查看一个readme.txt文件,如下图: 

Git 分支管理详解

大家可以看到我们刚才增加的一行内容不见了,嘿嘿。因为那个提交是在dev分支上,而master分支没有变化。好了,下面我们来演示一下合并分支。 

4.合并分支(快速合并) 

现在,我们把dev分支的工作成果合并到master分支上,如下图: 

Git 分支管理详解

git merge 命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。如下图: 

Git 分支管理详解

大家注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度 非常快。当然,也不是每次合并都能Fast-forward,我们后面会将其他方式的合并。合并完成后,就可以放心地删除dev分支了。 

5.删除分支 

下面我们来演示一下删除分支,如下图: 

Git 分支管理详解

大家在实际操作中可以发现在我们创建、合并、删除分支的速度非常快吧,这和直接在master分支上工作效果是一样的,但过程更安全,更可靠。下面我们来简单的总结一下: 

  • 查看分支 git branch -a 
  • 创建分支 git branch name 
  • 切换分支 git checkout name 
  • 创建并切换 git checkout -b name 
  • 合并某分支到当前分支 git merge name 
  • 删除分支 git branch -d name 

6.分支合并冲突 

下面我们来演示一下不同分支修改同一个文件产生冲突问题,下面我们来创建一个新的分支,继续开发新功能: 

Git 分支管理详解

现在我们将分支切换到master分支上修改readme.txt内容并提交,如下图: 

Git 分支管理详解

这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,如下图: 

Git 分支管理详解

果然冲突了,Git告诉我们readme.txt文件存在冲突,必须手动解决冲突后再提交。下面我们用git status查看一下状态: 

Git 分支管理详解

下面我们来查看一下readme.txt中的内容,如下图: 

Git 分支管理详解

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,让我们选择要保留的内容,下面我们修改一下readme.txt,再次提交。如下图: 

Git 分支管理详解

好了,到这我们的分支合并冲突就讲解完成了,下面我们来删除分支。如下图: 

Git 分支管理详解

最后,我们可以用 git log --graph --pretty=oneline --abbrev-commit 命令,查看一下分支合并。 

7.合并分支(普通合并) 

分支合并分为快速合并与普通合并两种模式,普通合并,合并后的历史有分支记录,能看出来曾经做过合并,而快速合并就看不出来曾经做过合并。下面我们来演示一下普通合并, 

Git 分支管理详解

大家可以看到我们这次合并用的普通模式合并,--no-ff参数表示禁用快速合并。下面我们用git log命令查看一下合并历史: 

Git 分支管理详解

注,合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支记录,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。如下图: 

1).快速合并

Git 分支管理详解

2).普通合并

Git 分支管理详解

8.分支管理策略 

下面我们来说一下一般企业中开发一个项目的分支策略: 

  • 主分支 master 
  • 开发分支 develop 
  • 功能分支 feature 
  • 预发布分支  release 
  • bug 分支 fixbug 
  • 其它分支 other 

1).主分支 master

代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。 

Git 分支管理详解

Git主分支的名字,默认叫做Master。它是自动建立的,版本库初始化以后,默认就是在主分支在进行开发。 

2).开发分支 develop

主分支只用来分布重大版本,日常开发应该在另一条分支上完成。我们把开发用的分支,叫做Develop。 

Git 分支管理详解

这个分支可以用来生成代码的最新代码版本。如果想正式对外发布,就在Master分支上,对Develop分支进行"合并"(merge)。 

3).功能分支 feature

功能分支,它是为了开发某种特定功能,从Develop分支上面分出来的。开发完成后,要再并入Develop。 

Git 分支管理详解

功能分支的名字,可以采用feature-*的形式命名。 

4).预发布分支  release

预发布分支,它是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。预发布分支是从Develop分支上面 分出来的,预发布结束以后,必须合并进Develop和Master分支。它的命名,可以采用release-*的形式。 

5).bug 分支 fixbug

bug分支。软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进Master和Develop分支。它的命名,可以采用fixbug-*的形式。 

Git 分支管理详解

6).其它分支 other

还有就是其它分支了,大家可以根据需要创建即可…… 

9.团队多人开发协作 

在上面的章节中我们讲解了Git的分支管理策略,一般开发团队中有这样几个分支,master、develop、feature、release、 bug、other分支,或者你还有其它分支,那有博友会问了,你讲了那么多分支,都在本地放着我们怎么查看和推送分支到远程服务器上呢?嘿嘿,我们说大 家别急我们在这一章节中就来重点讲解,在团队多人协作中的分支推送与抓取。 

1).查看远程仓库分支

查看远程仓库的信息,如下图: 

Git 分支管理详解

大家可以看到git remote命令可以查看远程仓库,加-v选项可以查看详细信息。上面显示了你抓取和推送的origin(源)信息。 当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且远程仓库的默认名称是origin。 

2).分支推送

下面我们来演示一下将本地分支推送到远程的仓库中,如下图: 

Git 分支管理详解

大家可以看到,我们的本地master分支与远程的master分支已同步。下面我们来演示一下同步dev分支,如下图: 

Git 分支管理详解

我本地有很多分支,有哪些分支需要推送到远程仓库中呢?一般是这样的, 

  • master 分支是主分支,要时刻与远程同步,一般我们发布最新版本就用master分支 
  • develop 分支是开发分支,团队中所有人都在这个分支上开发,所以也需要与远程同步 
  • bug 分支一般只在本地使用来修复bug,一般不需推送远程仓库中 
  • feature 分支是否需要推送到远程,要看是不是有几个人合作开发新功能,如果你是一个开发,那就留在本地吧 
  • release 分支一般是系统管理,推送或抓取的分支一般与开发人员无关 
  • other 分支大家按需求分配 

3).分支抓取

现在你一同事在电脑上克隆一份仓库,我们来演示一下。 

生成公钥: 

Git 分支管理详解

将生成的公司增加到git服务器上: 

Git 分支管理详解

克隆远程版本库: 

Git 分支管理详解

我们现在查看一下分支: 

Git 分支管理详解

你同事要在dev分支上开发,就得创建与远程origin一样的dev分支到本地的仓库上,下面我们来创建一下: 

Git 分支管理详解

现在你同事就可以在dev分支上开发了,下面我们新建一些文件并提交到远程dev分支: 

Git 分支管理详解

你的同事向origin/dev分支提交了一个index.html页面,现在你也在修改这个文件,并提交: 

Git 分支管理详解

推送失败,因为你同事的最新提交和你推送的提交有冲突,Git提示我们,先用git pull把最新的提交从origin/dev抓下来,然后在本地合并解决冲突,再推送: 

Git 分支管理详解

git pull 失败了,原因是没有将dev分支与远程origin/dev分支进行链接,Git提示我们设置dev和origin/dev的链接: 

Git 分支管理详解

下面我们再来git pull一下试试: 

Git 分支管理详解

git pull 成功,但是合并有冲突需要手动解决,解决的方法和分支管理中的解决冲突完全一样。解决后提再push: 

Git 分支管理详解

Git 分支管理详解

Git 分支管理详解

好了,这样的我们的远程推送与抓取就讲解完成了,下面我们来总结一下。 

10.总结 

一般在团队中多人开发模式是这样的:首先,可以试图用git push origin branch-name推送自己的修改如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并如果合并有冲突,则解决冲突,并在本地提交没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。 文章来源地址https://www.toymoban.com/news/detail-424026.html

到了这里,关于Git 分支管理详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Git 将一个分支完全覆盖(不是合并)到另一个分支

    Git 将一个分支完全覆盖(不是合并)到另一个分支 案例: 将dev分支的代码完全覆盖到master上      1.git checkout master      2.git reset --hard dev      3.git push origin master --force 注意:若被覆盖的分支有处于受保护(protected)的状态,则执行push操作后会报错:      1. remote: GitLab: Y

    2024年02月01日
    浏览(76)
  • 使用idea 把一个git分支的部分提交记录合并到另一个git分支上

    需要把自己在分支future-vvip-integral提交的部分记录,合并到线上分支release1.2.1-hotfix上。现把处理过程记录下来,以便以后在遇到同样的需求。 1.idea切换项目分支到被合并的分支; 2.点击idea左下角的git–Log:on 要合并的分支名;选择自己提交的记录内容; 3.在提交的记录内容中

    2023年04月08日
    浏览(53)
  • Git-将某次commit从一个分支转移到另一个分支

            应用场景:多个分支并行开发的情况下提交到错误的分支上,或者开发版本都已经准备好了,但是release计划有变,需要调整release里面的features,那么我们可以优雅而从容的面对PM的要求。         多个分支并行开发的情况下,将某次commit提交错分支了,那么久

    2024年02月08日
    浏览(42)
  • git merge:要将一个分支的代码合并到另一个分支

    在Git中,要将一个分支的代码合并到另一个分支,可以使用git merge命令。以下是将v6 分支的代码合并到v6.1分支的基本步骤: 确保在目标分支上: 在执行合并之前,请确保你在目标分支(v6.1)上。可以使用以下命令切换到目标分支: 拉取最新代码: 为了避免合并冲突,确保

    2024年04月15日
    浏览(43)
  • git将一个远程分支的部分修改提交到另一个远程分支

    将一个远程分支的部分修改提交到另一个远程分支,可以使用 git cherry-pick 命令。这个命令可以选择特定的提交(commit)从一个分支应用到另一个分支。 切换到目标本地分支 : 首先,确保您在您的本地机器上切换到了目标分支(即您想要应用修改的分支)。例如,想将修改

    2024年01月16日
    浏览(37)
  • Git篇——git pull远程分支强制覆盖本地的另一个分支

    1.在要被覆盖的分支下,拉取所有代码 2.将本地分支重置  3.切换到其他分支 4.拉取代码覆盖 前2步是强制解决本地分支的可能出现的错误状态,因为状态错误的话,步骤4可能会无法顺利执行。

    2024年02月11日
    浏览(29)
  • git把一个分支上的某次提交同步到另一个分支上

    如果你需要把一个分支上的某次修改的提交记录合并到另外一个分支上,很简单: 1、可以使用git log 命令 或去gitlab界面找   commit的ID号,比如 aabb4d0203 2、切换到目标分支上(即在要合并到的分支上),执行命令: 就会挑拣出这次提交中的文件信息. 备注: 如果要取消这次 c

    2024年02月04日
    浏览(33)
  • git分支-分支管理

    现在已经创建、合并和删除了一些分支,让我们来看看一些分支管理工具,在开始经常使用分支时会很有用。 git branch命令不仅仅用于创建和删除分支。如果不带参数运行它,会得到当前分支的简单列表。 $ git branch   iss53 * master   Testing 这个*字符是前缀,表示当前检出的分

    2024年04月10日
    浏览(76)
  • GIT操作:把当前仓库的一个分支push到另一个仓库的指定分支

            有时候我们想把当前仓库A的一个指定分支1 推给 另一个仓库B的另一个指定分支2, 可以通过2个主要命令git remote xxx 和 git push newOrigin 当前分支:目标分支 完成。 示例 假设有2个仓库rep1和rep2 rep1:当前仓库  rep2:目标仓库 我们想把当前仓库[rep1]的指定分支[bran

    2024年02月03日
    浏览(34)
  • 【Git】分支管理--创建新分支、删除分支、恢复分支

       1、查看所有分支 2、切换到将要复制的现有分支   sourceBranch 为接下来要复制到新分支的现有分支名。创建的新分支依赖当前所在分支,且新分支一旦创建不能更改依赖,所以要提前切换到希望复制的分支 3、创建新分支   newBranch 为新分支名 4、push内容到新分支  

    2024年02月07日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包