Git 分支管理

本文详细解释了Git中的分支概念,包括如何创建、切换和合并分支,特别强调了Git的快进合并机制。通过实例演示了在Git中管理分支的基本操作,如创建dev分支、提交文件、合并回master分支以及删除分支的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。

使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

在这里插入图片描述

Git 分支实际上是指向更改快照的指针。

有人把 Git 的分支模型称为必杀技特性,而正是因为它,将 Git 从版本控制系统家族里区分出来。

在Git里,刚开始就有的这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向mastermaster才是指向提交的,所以,HEAD指向的就是当前分支。

一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点。每次提交,master分支都会向前移动一步,这样,随着不断提交,master分支的线也越来越长。

在这里插入图片描述

当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev

在这里插入图片描述

你看,Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!

不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:

在这里插入图片描述

假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:

在这里插入图片描述

所以Git合并分支也很快!就改改指针,工作区内容也不变!

合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:

在这里插入图片描述

分支操作

命令说明备注
git branch查看分支
git branch (branchname)创建分支
git checkout (branchname) 或者 git switch (branchname)切换分支当切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录
git merge (branchname) 合并某分支到当前分支可以多次合并到统一分支, 也可以选择在合并之后直接删除被并入的分支
git checkout -b (branchname)或者git switch -c (branchname)创建+切换分支
git branch -d (branchname)删除分支

实战

开始前我们先创建一个测试目录:

$ mkdir keduo
$ cd keduo
$ git init
已初始化空的 Git 仓库于 /home/ubuntu/keduo/.git/
$ touch README
$ git add README
$ git commit -m '第一次版本提交'
[master (根提交) f7295fb] 第一次版本提交
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README
  1. 列出本地的分支
$ git branch
* master
  1. 创建dev分支,然后切换到dev分支
$ git checkout -b dev
切换到一个新分支 'dev'
$ git branch
* dev
  master

git branch命令会列出所有分支,当前分支前面会标一个*

  1. 然后,在dev分支上正常提交,比如添加test.txt,并加上一行:

    csdn@keduo
    

    然后提交:

    $ echo 'csdn@keduo' > text.txt
    $ git add .
    $ git commit -m 'add test.txt'
    [dev 405fb58] add text.txt
     1 file changed, 1 insertion(+)
     create mode 100644 text.txt
    

命令解析:

echo 'csdn@keduo' > text.txt表示向文件text.txt写入文本csdn@keduo

  1. dev分支的工作完成,切换回master分支:

    $ ls
    README  text.txt
    $ git checkout master
    切换到分支 'master'
    $ ls
    README
    

    切换回master分支后,再查看一下text.txt文件,文件不见了!因为那个提交是在dev分支上,而master分支此刻的提交点并没有变:

    在这里插入图片描述

  2. dev分支的工作成果合并到master分支上:

    $ git merge dev
    更新 f7295fb..405fb58
    Fast-forward
     text.txt | 1 +
     1 file changed, 1 insertion(+)
     create mode 100644 text.txt
    

    注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

    但不是每次合并都能Fast-forward,后面会讲其他方式的合并

    $ ls
    README  text.txt
    $ cat text.txt 
    csdn@keduo
    

    合并后,再查看text.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。

  3. 合并完成后,删除dev分支

    $ git branch
      dev
    * master
    $ git branch -d dev
    已删除分支 dev(曾为 405fb58)。
    $ git branch
    * master
    

    删除后,查看branch,就只剩下master分支了

    因为创建、合并和删除分支非常快,所以Git鼓励使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值