常用的git分支管理方法都在这了

article/2025/11/8 16:34:02

一、分支管理定义     

        几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线,使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作,Git 分支实际上是指向更改快照的指针。

        其作用显然是方便开发:企业在开发项目中一般少不了四个分支:

master分支:用于版本的更新,当比较大的功能开发完成或者更新之后会有一次集体的发版,就会将所有的代码都合到master(有的公司也会用release分支发版,原理都是一样);

dev分支:一般是开发测试分支,在项目发版上线之前都会现在dev分支上统一进行测试,确保功能达标没有bug之后再推到master分支;

feature分支:用来做分模块功能开发,建议命名为feature-xxx,模块完成之后,会合并到 dev 分支;

hotfix分支:是用来做线上的紧急 bug 修复的分支,建议命名为 hotfix-xxx。当线上某个版本出现了问题,将检出对应版本的代码,创建 Hotfix 分支,问题修复后,合并回 dev和master  ,这里注意,合并到 master 的时候,一般要打上修复后的版本标签。

二、分支管理的预备知识

1. 分支管理的区域

a. 本地分支:

  • Workspace:工作区,就是vscode中日常开发存放项目代码的地方

  • Index (Stage):暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

  • History:本地仓库,就是安全存放数据的位置,这里面有你提交到所有版本的数据,其中HEAD指向最新放入仓库的版本。

b. 远程分支

  • Remote Directory:远程仓库,托管代码的服务器,即公司的 git仓库 DevOps

        一般开发过程中,我们会把本地与远程的分支名设为同名。那怎么区分呢?远程分支名前面有 remote origin 标志!各个区域的关系如下图所示:

 2. git文件的四种状态

        在从远端下载项目代码时,要求是用命令行 clone代码,而不是鼠标点击下载一个压缩文件,区别在于,clone下来的文件夹里有个.git目录,关于文件版本等的所有信息都在这个目录里面!它也是你能够进行分枝管理版本控制的基础。

        版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !

  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

三、分支管理策略

        一般来说,项目开发的流程为:从代码仓库的master分支下clone下项目的工程代码,然后基于当前master分支新建自己的feature分支进行开发,这个要注意本地和远程分支的关系(不清楚的可以看我上篇文章git入门)。开发完成之后就推到dev测试,通过测试之后就可以merge合到master,合到master分支的操作一般叫 “提mr” , 通过公司的DevOpps流水线操作。如果临时需要新增什么小功能或者修复什么小bug可以 “ 提热更”,也就是从master分支拉个hotfix分支,进行修改然后直接测试完合到master分支。

具体分支管理如下:

1. 查看、新建分支

a. 查看分支

git branch

1.1 git branch 不带参数,查看本地已经存在的分支,并且在当前分支的前面有 * 标记; 

1.2 后面加上 -a 参数可以查看所有分支列表,包括本地和远程,远程分支一般会用红色字体标记出来
如果用git branch -a没有显示全部的远程分支,可以通过git fetch将本地远程跟踪分支进行更新,与远程分支保持一致。

1.3 后面加上 -vv 参数可以显示本地所有分支追踪(关联)的远程分支的情况,最后面是最近一次提交commit的注释。


 

b. 新建分支 

        git branch 后面加上新建的分支名 (branchname) 即可完成本地分支的建立(分支内容与master一样,因为在新建分支时的当前所处分支为master(*标识) ,也即你是基于master新建的test分支),并且此分支仅存在于本地。

2. 操作分支 

        包括:切换、删除、关联远程

a. 切换分支

        2.1 倘若需要查看本地新建的 test 分支情况,需要切换到本地分支

git checkout (branchname)

        2.2 新建切换可以合为一步:新建并切换到新分支,常用!!!

$ git checkout -b test2

         2.3 切换到远程分支(常用!!!)

        比如说我现在test1分支,想查看远端test2的代码(此时本地会新建并切换一个分支,当然你可以把这个本地的分支名设置成与远端同名)下面我演示设置不同名的情况:

git checkout -b [local name] [origin name]

b. 关联分支

        2.4 本地新建的分支,需要关联远程的某个分支才能 push 成功,否则会出现一下报错,关联命令会自动提示,按提示关联远程分支后会在远端新建一个同名的远程分支

当然你也可以先关联再push:

git branch --set-upstream-to=origin/xxx分支名
git remote add origin  远端仓库地址

c. 删除分支

 2.5 删除远程分支

git push origin --delete test2

 2.5 删除本地分支,注意不能删除当前所在分支,不然会报错,只能删除非当前分支

四、push分支

        1. 忽略文件        

有些时候我们不想把某些文件纳入版本控制中,比如依赖包node_modules(很大)、dist文件、临时文件、日志文件yarn-debug.log*等,在主目录下建立".gitignore"文件,此文件有如下规则:

  1. 忽略文件中的空行或以井号(#)开始的行将会被忽略;

  2. 可以使用通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等;

  3. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略;

  4. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略;

  5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。


#为注释
*.txt        #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
!lib.txt     #但lib.txt除外
/temp        #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/       #忽略build/目录下的所有文件
doc/*.txt    #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

        2. push命令

git push 命令用于从将本地的分支版本上传到远程并合并:

git push <远程主机名> <本地分支名>:<远程分支名>
如果本地分支名与远程分支名相同,则上述命令可以省略‘ :<远程分支名> ’,如将本地的 master 分支推送到 origin 主机的 master 分支:
git push origin master

如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数,但一般不建议使用。多人协作时,若push失败时应当自行处理完冲突再push,而不是用以下命令。

git push --force origin master

此外,前文中直接使用 git push 进行push,仅适用于本地和远程分支已关联并且同名的情况!


http://chatgpt.dhexx.cn/article/M8NbQTZX.shtml

相关文章

前端安全之xss与xsrf

提到前端安全&#xff0c;往往离不开xss(跨站脚本攻击)、xsrf(跨站伪造请求)&#xff0c;在此记录一下关于前端安全的学习过程。 什么是xss&#xff1f; 跨站脚本攻击(Cross Site Scripting)&#xff0c;为了不和css(层叠样式表)混淆&#xff0c;故记为xss。其原理是利用用户…

前端安全问题及防范

目录 XSS攻击反射型存储型DOM型总结 CSRF攻击点击劫持CDN带来的风险文件上传漏洞本地存储信息泄露 XSS攻击 XSS(Cross-Site Scripting,跨站脚本)&#xff0c;是比较常见的安全漏洞问题&#xff0c;其主要的攻击方式是通过表单或者页面url参数来注入一些可执行的代码&#xff0…

前端安全之csp

最近前端项目被白帽子使用appscan扫到安全漏洞,老大勒令我们抓紧修复,我们先来看两个级别比较低的漏洞 看到这儿对于我个渣渣前端来说是懵逼的,难道我设置一下http header 就ok了 简单来介绍下什么叫做csp内容安全策略 (CSP) 是一个额外的安全层,用于检测并削弱某些特定类型…

Web前端安全系列之:XSS攻防及Vue防御(万字长文)

关注公众号 笑果杂谈 前言 Web 安全的兴起 Web 攻击技术的发展也可以分为几个阶段。在 Web 1.0 时代&#xff0c;人们更多的是关注服务器端 动态脚本的安全问题&#xff0c;比如将一个可执行脚本&#xff08;俗称 webshell&#xff09;上传到服务器上&#xff0c;从而获得权…

前端安全:CSRF、XSS该怎么防御?

近几年随着业务的不断发展&#xff0c;前端随之面临很多安全挑战。我们在日常开发中也需要不断预防和修复安全漏洞。接下来&#xff0c;梳理一些场景的前端安全问题和对应的解决方案。 XSS攻击介绍 XSS是后端的责任&#xff0c;后端应该在用户提交数据的接口对隐私敏感的数据…

如何解决Web前端安全问题?

我国网络技术水平的提升&#xff0c;带动着WEB前端业务量的显著增长&#xff0c;人们对于网络服务的需求也日益复杂&#xff0c;与此同时&#xff0c;越来越多的黑客出现&#xff0c;其攻击水平也有了明显提升&#xff0c;WEB前端也成为了众多黑客进行网络攻击的主要目标。 因…

前端安全问题的解决方法

目录 前言&#xff1a; 1.常见的安全性问题 2.XSS攻击的解释和解决方法 2.1 XSS攻击是什么&#xff1a; 2.2 经常出现的原因&#xff1a;用户输入&#xff0c;如input框 2.3 防御方式&#xff1a; 3.CSRF&#xff08;跨站请求伪造&#xff09;的解释和解决方法 3.1 是什么…

前端常见的安全问题

一、XSS &#xff08;Cross-Site Scripting&#xff09;跨站脚本攻击 通常指通过“HTML注入”篡改了网页&#xff0c;插入了恶意的脚本&#xff0c;从而在用户浏览网页时&#xff0c;获取用户信息、控制用户浏览器等的一种攻击 分类&#xff1a;持久性&#xff08;存储型xss&…

前端常见安全性问题

文章目录 一、常见的安全性问题二、XXS攻击&#xff08;Cross Site Scripting&#xff09;&#xff08;跨站脚本攻击&#xff09;三、CSRF安全漏洞&#xff08;跨站请求伪造&#xff09;四、文件上传漏洞五、限制URL访问&#xff0c;越权访问六、不安全的加密存储七、SQL注入攻…

前端WEB安全

一、浏览器安全 首先了解前端web安全知识&#xff0c;比不可绕开的基础就是同源策略了&#xff0c;同源策略&#xff08;Same Origin Policy&#xff09;是一种约定&#xff0c;它是浏览器最核心也最基本的安全功能&#xff0c;如果缺少了同源策略&#xff0c;则浏览器的正常功…

前端安全问题以及解决方案汇总

随着大前端的快速发展&#xff0c;各种技术不断更新&#xff0c;前端的安全问题也值得我们重视。今天我们来聊一聊前端常见的7个安全方面问题&#xff1a; 1.iframe 2.opener 3.CSRF&#xff08;跨站请求伪造&#xff09; 4.XSS&#xff08;跨站脚本攻击&#xff09; 5.ClickJa…

浅谈前端安全

1 什么是前端安全&#xff1f; 所有发生在浏览器、单页面应用、Web页面当中的安全问题都算是算是“前端安全问题”。或者就是说所有需要前端开发人员去修复的问题都属于前端安全问题。 2 前端目前存在哪些安全问题 2.1 xss&#xff08;Cross Site Scripting&#xff09;跨站…

数据结构中头结点的作用

数据结构中&#xff0c;在单链表的开始结点之前附设一个类型相同的结点&#xff0c;称之为头结点。头结点的数据域可以不存储任何信息&#xff0c;头结点的指针域存储指向开始结点的指针&#xff08;即第一个元素结点的存储位置&#xff09;。 作用 1、防止单链表是空的而设的…

链表的首元结点、头结点、头指针的区别(图示)

1、首元结点&#xff1a;就是指链表中存储第一个数据元素a1的结点。 2、头结点&#xff1a;它是在首元结点之前附设的一个节点&#xff0c;其指针域指向首元结点。头结点的数据域可以不存储任何信息&#xff0c;也可以存储与数据元素类型的其他附加信息&#xff0c;例如&#…

单链表两种结构:头指针,头结点与首元结点辨析

要区分头指针&#xff0c;头结点&#xff0c;首元结点这几个概念分别指什么&#xff0c;需要结构图来帮助阐释。 我们先来看一种不太严谨的表现形式。 1->2->3->4->NULL 头结点这个名词很具有迷惑性。比如这张图中&#xff0c;刚接触的新手很容易以为1就是来自头…

【头指针,头结点、首元节点】

链表中第一个结点的存储位置叫做头指针&#xff0c;那么整个链表的存取就必须是从头指针开始进行了。之后的每一个结点&#xff0c;其实就是上一个的后继指针指向的位置。 这里有个地方要注意&#xff0c;就是对头指针概念的理解&#xff0c;这个很重要。“链表中第一个结点的存…

单链表:头指针 头结点 首元结点区别与联系

单链表组成&#xff1a;头指针头结点第一个结点第二个结点第三个结点.............第N个结点。 注意下图中&#xff1a;首元结点就是第一个结点。 头指针&#xff1a;作用&#xff1a;1.头指针的名字就是本链表的名字 2.头指针也是一个指针&#xff0c;存放头节点地址 头结…

链表:头结点

简介&#xff1a; 头结点的数据域可以不存储任何信息&#xff0c;头结点的指针域存储指向第一个结点的指针&#xff08;即第一个元素结点的存储位置&#xff09;。头结点的作用是使所有链表&#xff08;包括空表&#xff09;的头指针非空&#xff0c;并使对单链表的插入、删除操…

头指针和头结点

在了解头指针和头结点之前&#xff0c;先介绍数据域、指针域、结点和链表的定义&#xff1a; 数据域用来存储元素的数值数据 指针域存储直接后继节点的存储位置 结点是数据元素的存储映像。由数据域和指针域两部分组成 链表 n个结点由指针链组成一个链表。它是线性表的链式…

关于链表中头指针和头结点的理解

线性表使用顺序&#xff08;数组&#xff09;存储时有个弊端&#xff0c;那就是在插入和删除时需要大量的移动数据&#xff0c;这显示是非常消耗时间的&#xff0c;所以可以采用链式存储&#xff0c;即有一个指针域&#xff08;单链表&#xff09;&#xff0c;来记录下个结点的…