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的分支管理,相信大家在心中也有一个初步的理解了。

结束。

超实用!用ChimeraX对AlphaFold 结果可视化(中): 蛋白结构美化篇 而一般需要的背景颜色是无色(白色),有三种方法可以更改背景颜色,这里我们介绍两种方法,第三种在下一小节中讲解。如果想选中蛋白链中的某一结构区域或者某些位点,可以用Ctrl+Shift+鼠标左键,或在软件窗口中点击。在这个窗口中可以对蛋白的主链、侧链、表面等颜色进行修改,只用在。,即可在右下角看到我们蛋白的序列信息,在这里面直接用鼠标选择要选择的结构域。就会有更多的颜色供我们选择,如果有特定的色号还可以在这个界面继续选择。后面的颜色(②),就可以选择想要的任何背景颜色(③)。就可以选择软件推荐的常用颜色。 阅读详情

相关推荐

对极几何 —两相机相对位置关系与相机姿态估计方法(基础矩阵,本征矩阵,单应矩阵梳理)附c++源码

对极几何 —两相机相对位置关系与相机姿态估计方法(基础矩阵,本质矩阵,单应矩阵梳理)附c++源码对极几何是什么,它有什么用(整体流程理解)对极约束(描述两相机关系)基础矩阵特性与求解方法本质矩阵特性与求解方法相机姿态恢复方法怎么又冒出了个单应矩阵H? 对极几何是什么,它有什么用(整体流程理解) 如图,当空间上有一个点分别在相机1和相机2上进行成像,这两个点存在什么变换关系呢?再扩展一下,真实世界下的场景分别用两个相机进行拍摄,获得两张照片,两张照片有什么变换关系呢?那么对极几何就是用来描述这种变换关系的。

qq_37764141的博客 5104

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

海康WEB3.3控件开发包 V3.3 前端vue项目调用实时监控画面

本需求的完成离不开后端将设备映射到公网, 以及前端单独部署demo页面这个思路的转变。

hero8011的博客 1万+

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

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

weixin_46240162的博客 449

Snort源代码编译 _ 采坑之旅(for Windows VS2015)

    系统环境:Windows7 sp1 x64     编译环境:VS2015 SP1     Snort版本:2.9.12     daq版本:2.0.6     Snort官网:https://www.snort.org/downloads#snort-downloads 背景     最近需要实现一个类似网络防火墙的产品,主要参考Snort源码,先花了点时间简单读了下网上比较流行的《...

magictong的专栏 8888

解决Windows 10更新失败错误代码0x80070643

在Windows 10操作系统的更新过程中,用户时常会遇到各类错误代码,这些代码通常成为顺利完成更新的绊脚石。其中,错误代码0x80070643是一个较为常见的更新失败提示,它可能导致系统更新停滞不前。面对这一挑战,本文将详细介绍如何有效解决这一错误,帮助用户顺利完成Windows 10的更新。

nntxthml的博客 1827

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

Langfuse实战:从评估打分到问题解决的完整指南

本文详细介绍了如何利用开源LLM工程平台Langfuse对AI应用进行系统性评估与优化。从创建评估数据集、设计自动化评分函数,到深入排查常见问题并关联Trace进行精准打分,提供了完整的实战指南。最后,探讨了如何利用评估结果驱动提示词迭代与A/B测试,并给出了生产环境部署与性能优化的关键考量,帮助开发者构建可测量、可分析、可改进的LLM应用。

backprop5master的博客 650

在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

S7-200SMART 的运动控制(一)向导配置具体步骤(图文)

S7-200SMART 的运动控制(一)向导配置具体步骤(图文)

Robot_PLC_HMI_Automation 3849

CloudCompare 二次开发(35)——提取多条直线

使用CloudCompare与PCL编程实现的多条空间直线的提取。

点云侠的博客 438

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

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

weixin_44126638的博客 3797

Claude Code 100个真实案例 - 用AI搭建LangChain多工具Agent(自主搜索+查询)

本案例展示如何使用 Claude Code 搭建一个 LangChain 多工具 Agent 系统。Agent 能够自主决定调用搜索引擎、数据库查询、天气查询、计算器等工具,像人类助手一样拆解问题并逐步解决。

yueyeguzhuo的专栏 558

Git之分支管理

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

一只小卷毛的博客 1737

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Git 的分支管理

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

Stewie Lee的博客 4455

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【Git】分支管理

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

Edison's 小宇宙 7万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

管理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、付费专栏及课程。

余额充值