Git 分支管理

git分支管理 分支 阅读详情

当我们利用git init初始化一个目录的时候,这个时候是没有任何分支的,因为还没有任何文件纳入Git管理流程呢。

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git init
Initialized empty Git repository in /cygdrive/f/test_workspace/.git/

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git branch

当我们添加第一个文件,并将其提交的时候,Git就会为我们默认创建一个分支,如下:

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   first.txt
#

利用git status命令,可以看到当前Git所处的分支是master分支。
当提交之后,输入git branch 命令,可以看到:

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git branch
* master

可以看到,此时Git系统中只有一个分支,如果有多个分支,*号则表明为当前的分支。

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git branch -v
* master 8119ddd Add Content to first.txt

而利用-v参数,则可以将当前分支的最新提交 8119ddd,还有其提交信息给显示出来。

利用cat 命令来看当前first.txt中的内容,如下:

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ cat first.txt
Test content in first.txt

之后,可以在这个时候再创建另外一个分支,比如叫做second分支,为其创建一个文件叫second.txt,如下:

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git branch second

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git branch
* master
  second

利用git branch <分支名>,可以创建一个分支,而此时,再利用git branch 可看到已经存在两个分支了,*号表明目前还是处于master分支。

可以利用git checkout 命令来切换分支,如下:

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git checkout second
Switched to branch 'second'

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git branch
  master
* second

可看到" Switched to branch 'second' " 字样,而且 * 号也在second 前面了,表明当前是处于second分支。

为second分支添加一个文件,如下:

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git branch -v
  master 8119ddd Add Content to first.txt
* second b981d42 Add second txt in second branch

可以看到second分支的最新提交是b981d42,就是添加了second.txt的提交。

此时切换到master分支,来看看此文件夹下面的文件,如下:

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git checkout master
Switched to branch 'master'

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ ls
first.txt

可以看到second.txt文件并不在此分支下面。
这就是分支的主要作用。在一个新的分支上面所做的提交,不会影响到其他分支的内容。


那么如何将second分支所做的修改整合到master分支中呢?
这有两种做法,有一种叫merge,有一种叫rebase。
在我看来,merge跟rebase就是谁主动谁被动的差别。
对于merge来说,要由master主动去将发生在second中的改变给整合过来。
对于rebase来说,要将在third的改变去在master中再全部走一遍,然后会得到一个新的third提交。
一般来说,rebase是为了得到一个干净的提交记录,有助于项目管理者去整合其他工作者提交的文件。

我们先创建一个thrid分支,利用second分支来学习merge,利用third分支来学习rebase。

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git branch -v
  master 8119ddd Add Content to first.txt
  second b981d42 Add second txt in second branch
* third  4150467 Add third txt in third branch

此时三个分支的提交如上,我们再分别看看各分支下的内容:

third分支:

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git branch -v
  master 8119ddd Add Content to first.txt
  second b981d42 Add second txt in second branch
* third  4150467 Add third txt in third branch

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ ls
first.txt  third.txt

second分支:

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git checkout second
Switched to branch 'second'

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ ls
first.txt  second.txt

master分支:

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git checkout master
Switched to branch 'master'

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ ls
first.txt

接下来,我们将second分支merge到master分支中,如下,在master分支下,利用merge命令:

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git merge second
Updating 8119ddd..b981d42
Fast-forward
 second.txt |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 second.txt

这样,就将second分支给整合进来了,再看一下当前分支下的内容:

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ ls
first.txt  second.txt

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git branch -v
* master b981d42 Add second txt in second branch
  second b981d42 Add second txt in second branch
  third  4150467 Add third txt in third branch

可看到 master和second分支的最新引用都是 b9d81d42。

接下来,我们要切换到third分支,利用rebase,将在third分支发生的改变在master分支上重演。

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git checkout third
Switched to branch 'third'

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: Add third txt in third branch

在这里,可以看到"rewinding head"等字样,这是因为master分支先整合了second分支,所以它的最新引用比当时切换出third分支的时候要往前,这个时候,会得到一个新的third提交,如下:

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git branch -v
  master b981d42 Add second txt in second branch
  second b981d42 Add second txt in second branch
* third  6dc82e8 Add third txt in third branch

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ ls
first.txt  second.txt  third.txt

可以看到,third的最新提交的引用已经由上面的4150467变成6dc82e8了。
它其实就是一个master提交,上面再重演了一遍third提交。

不过此时master还是在它原来的位置上,所以需要对master做一次fast forward,如下:

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git checkout master
Switched to branch 'master'

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git merge third
Updating b981d42..6dc82e8
Fast-forward
 third.txt |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 third.txt

在这里,由于示例的文件比较简单,结构也不复杂,所以看起来,跟merge其实差别不大,但是本质上,这是两种不同的整合方式。

好了,现在我们已经将second和third分支都给整合进来了,不再需要它们了,可以把它们删掉。

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git branch -d third
Deleted branch third (was 6dc82e8).

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git branch -v
* master 6dc82e8 Add third txt in third branch
  second b981d42 Add second txt in second branch

在上面添加分支的时候,我们是利用下面两个命令来进行添加分支跟切换分支,

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git branch second

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git checkout second
Switched to branch 'second'

而事实上很多情况,我们在创建分支的时候,就会想顺便切换过去了,所以通过指定 -b 参数,就可以实现我们的目的。

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git checkout -b forth
Switched to a new branch 'forth'

这跟上一章Git中提交中使用 -a 参数直接将添加进暂存区和提交到本地仓库整合成一步的道理是一样的。
Git中提供了多种这样的方式供我们使用。

在Git中,除了提供merge,rebase这两种工具来帮助我们整合文件之外,还提供了一个reset工具,根据其中文意思就是“重置”。它可以帮助我们将混乱的文件或者错误提交的文件给重置到某一次我们指定的提交上。

比如,现在在master分支中second.txt中不小心添加了一些错误的内容,并将其提交了,如下:

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git branch -v
  forth  6dc82e8 Add third txt in third branch
* master 37562da Add Wrong Data in second.txt
  second b981d42 Add second txt in second branch

那我们想将这一次的提交去掉,不要它了,那么就可以利用reset命令,如下:

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git reset 6dc82e8
Unstaged changes after reset:
M       second.txt
  
linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git branch -v
  forth  6dc82e8 Add third txt in third branch
* master 6dc82e8 Add third txt in third branch
  second b981d42 Add second txt in second branch

这个时候,我们可以看到master已经回到之前的版本了,而我们这一次改变的内容还留在second.txt中,
处于已修改,未暂存的状态,这个时候我们就可以自己去对这些错误的内容进行修正,再次提交了。

reset还有几个参数可供选择,如下:

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git reset --v
error: unknown option `v'
usage: git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]
   or: git reset [-q] <commit> [--] <paths>...
   or: git reset --patch [<commit>] [--] [<paths>...]

    -q, --quiet           be quiet, only report errors
    --mixed               reset HEAD and index
    --soft                reset only HEAD
    --hard                reset HEAD, index and working tree
    --merge               reset HEAD, index and working tree
    --keep                reset HEAD but keep local changes
    -p, --patch           select hunks interactively

可利用各参数重置到不同的程度,其中index指的就是暂存区域。

假设用--soft,只会重置HEAD,也就是说改变的内容会被添加到暂存区域(index),只要再次提交就可以,如下:

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git reset --soft 6dc82e8

linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   second.txt
#

而如果使用--hard,则会将工作目录的改变也给重置掉,切记。

好了,到这里,关于在本地如何利用Git的分支管理,相信大家在心中也有一个初步的理解了。

结束。

questasim的傻瓜式安装与仿真教程 一、安装 1、下载软件 链接:https://pan.baidu.com/s/1S05AnO_w-wy6RsAj_kdUXg 提取码:p2nt 2、根据电脑类型是32位还是64位,解压不同安装包。 解压得: 2、运行.exe文件,出现: 问题及解决办法: 这是杀毒软件造成的,因此在安装过程中关闭杀毒软件即可。关闭之后,再次运行.exe文件。 3、点击下一步,进入选择安装位置界面,如下:选择好安装位置后点击下一步。 4、点击同意 5、接下来等待安装结束即可,在安装过程中,会跳出来弹框,询问是否要添 阅读详情

相关推荐

禅道18.3版本二开避坑指南:手把手教你扩展自定义报表功能

本文详细介绍了禅道18.3版本的二次开发实践,重点讲解如何扩展自定义报表功能。通过zentaoPHP框架的深度定制,从开发环境搭建到核心数据模型扩展,再到可视化配置和性能优化,手把手教你构建多维报表分析系统,满足企业级项目管理需求。

day7的博客 370

git error: unknown option `--no-verify‘

创建分支 git checkout -b 分支名称 add代码 git add . git commit -m 描述 若报error错误:error: unknown option `--no-verify' 在git commit -m 描述--no-verify 之后git push origin push 自己创建的分支名称

qq_41429765的博客 1168

使用 Wireshark 分析 PPPoE 流量中的 BRAS 名称 AC-Name

客户端发出广播请求,寻找 PPPoE 服务器。: BRAS 服务器响应 PADI 请求,提供服务并包含AC-Name。: 客户端选择一个 BRAS 并发起连接请求。: BRAS 确认连接并分配会话 ID。在这些阶段中,AC-Name是 BRAS 提供的一个关键字段,用于标识服务器名称。

caca_66的博客 2066

Git版本控制爬坑日记(二)

Git版本控制爬坑日记(二) 先上Git工作流程图 管理暂存区的文件 暂存区的文件,也就是相当于是小推车里面的文件, 当我们第一次将文件放到暂存区里,可能会有放早了的情况,我们可以使用git rm --cached a.html的方式将文件从暂存区里面取出。 当我们是第二次提交,也就是说仓库里其实已经有了这个文件了,我们从暂存区里取出的代码就要使用git reset HEAD a.html的方式取出 如果我们要回退前一个版本,可以使用git checkout -- a,.html的方式,就会回退当上一个

weixin_46240162的博客 449

GMSL2 协议与技术 第一部分

默认情况下,自动的链路配置功能是使能的(AUTO_LINK = 1),这表示器件将试图锁定在single link模式,它将自动监测是否PHY-A或者PHY-B已经连接到了远端的器件,并且使能这个已连接的PHY,如果PHY-A和PHY-B同时连接到了远端的器件,它将使用首先探测到的连接进入single link 模式。另外,链路失锁同样也会发生在串行器或者解串器掉电的情况下,掉电的器件重新上电后,链路锁定会自动重新建立,而视频数据和控制通道的配置需要重新写入寄存器。

八哥望春的博客 4946

重带电粒子的能量歧离(energy straggling)

能量歧离,Bethe-Bloch

G751888629的博客 2298

git 常用命令

安装后 $ git config --global user.name "Your Name" $ git config --global user.email "email@example.com" 生成公钥私钥 $ ssh-keygen -t rsa 查看公钥 cat ~/.ssh/id_rsa.pub 添加至暂存区 $ git add 提交至当前分支 $ git commit -m 关联远...

weixin_40790313的博客 1188

uniapp [全端兼容] - 实现人脸识别对比+人脸相似度,从相册选择或拍照上传两张图片进行人脸对比得到人脸相似度及判断是否是同一个人,人脸活体检测及对比(免费纯前端方案+调用第三方API接口方案)

uniApp人脸对比 人脸对比识别 人脸对比相似度,uniapp实现获取手机摄像头权限,调用相机拍照实现人脸识别相似度对比,uniapp实现人脸识别对比,计算两张人脸的相似度,从而判断是否同一个人,并给出相似度评分。uniapp H5网页如何实现人脸相似度比对,uniapp纯前端怎么对比两张图片的相似度,计算两幅图像的相似度,图像相似度对比方法,UNI-APP人脸相似度对比,快速识别两张照片的相似程度(用百分比)图片相似度对比在线测试,图片相似度对比,uniapp微信小程序人脸相似度对比分析,uniapp

🏆 前端领域优质创作者 5020

在VScode中使用Git

1 在VScode中设置Git.exe路径 在VScode中点击右下角的管理找到设置,在搜索设置栏里面输入git.path 系统会提醒进入settings.json下添加git.exe的路径 { "explorer.confirmDelete": false, "git.path": "E:/GIT/Git/bin/git.exe" //添加这条,路径根据自己安装地方找,注意是"/" 而不是 "\...

Weirdchun 756

路由三大分类:直连路由、静态路由、动态路由

直连路由、静态路由和动态路由各有其独特的特点和适用场景。直连路由适用于简单的直接连接网络,静态路由提供了精确的路径控制,而动态路由则在大型复杂网络中展现出强大的适应性和自动化能力。了解和掌握这三种路由类型的配置和管理,对于网络管理员来说,是确保网络高效、安全运行的重要技能。

网络技术联盟站 4698

常用元器件使用方法13:物理层接口芯片DP83848的使用方法

介绍: DP83848是以太网物理层接口芯片,具有多种型号,从便于焊接角度考虑LQFP-48封装较为合适,采用LQFP-48封装的芯片,有2种型号,分别为DP83848I和DP83848C,如下图所示。 其主要区别是使用温度不同,如下图所示。 这2种芯片芯片网上均有销售,按理说DP83848C价格应该更加便宜,实际不然,DP83848I的价格低于DP83848C,考虑或与芯片的出货量...

snmplink的博客 1万+

Rebase的使用以及修改远程库后rebese遇到的冲突问题

Rebase的使用以及修改远程库后rebese遇到的冲突问题

weixin_44126638的博客 3797

【深度学习新浪潮】Nano Banana(Gemini 2.5 Flash Image)技术解析与开发者实操指南

重新定义了 AI 图像生成的产业标准。它不仅是“平民化的视觉工厂”,更是推动内容生产从“创意试错”转向“精准制造”的关键工具。未来,随着视频生成能力的加入(谷歌计划支持“文字指令 - 动态场景 - 多平台适配”全流程),Nano Banana 有望进一步颠覆影视、广告等领域的创作范式。:批量生成多场景图,模特姿态自然,服装褶皱和材质细节高度一致,节省 90% 拍摄成本。模型的非正式代号,是一款革命性的 AI 图像生成与编辑工具,主打。:生成细节丰富的厨师特写,光影自然,皮肤纹理和刀具反光逼真。

专注:太空算力、AI infra、异构调度、大模型成本工程 889

Git之分支管理

本文介绍了Git的重要功能之一——分支。从分支的概念引入,介绍了管理分支的命令,通过举例的方式使其更为直观,更易理解。

一只小卷毛的博客 1737

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Git 的分支管理

快进合并发生想要合并到的分支在分支后没有提交记录。这种情况下,Git只需将 master 分支指针向前移动到 feature 分支的位置,无需创建新的合并提交。注意:在合并后 feature 分支并不会消失。如果你不再需要 feature 分支,你可以手动将其删除。三方合并适用于目标分支和被合并分支都有各自独立的提交,且存在一个共同的祖先节点。在这种情况下,Git 会将两个分支的最新提交与二者的最近祖先节点三者进行合并并提交。

Stewie Lee的博客 4455

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Git】分支管理

本文围绕Git分支展开,讲解分支的基础操作、合并冲突解决办法,介绍分支管理策略及bug分支等实战技巧,总结核心要点以助力高效协同开发。

Edison's 小宇宙 7万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

管理Git的分支

一、

qq_53514756的博客 3883

Git分支:什么是分支,如何管理分支?

一、前言 如果有人问你,当下最流行的“版本管理系统”(Version Control System)是什么,那你一定要毫不犹豫的告诉他,非Git莫属。 Git 相比同类软件,Git有很多优点。其中很显著的一点,就是版本的分支(branch)和合并(merge)十分方便。有些传统的版本管理软件,分支操作实际上会生成一份现有的代码的物理拷贝,而Git只生成一个指向当前版本(又称”快照“)的...

Smile yourlife 4993

Git分支管理

Git分支管理介绍

终为nullptr 1690

4. git分支管理

分支管理是Git最强大的功能之一。每一次提交,Git都把他们串成一条时间线,这条时间线就是一个分支。在之前的例子中,我们都只有一条时间线。在Git中,这个分支叫做主分支,也就是分支。对于先从github上创建再clone到本地的仓库,主分支被称为分支。对于先从本地创建,再push到远程仓库,主分支称为分支。

m0_60080979的博客 2042
上一篇: Git 基本用法
下一篇: Git 远程仓库
linmiansheng
博客等级 码龄20年 507粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值