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


    一、分支管理定义     

            几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线,使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作,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 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. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。

    1. #为注释
    2. *.txt #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
    3. !lib.txt #但lib.txt除外
    4. /temp #仅忽略项目根目录下的TODO文件,不包括其它目录temp
    5. build/ #忽略build/目录下的所有文件
    6. 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,仅适用于本地和远程分支已关联并且同名的情况!

  • 相关阅读:
    npm切换淘宝镜像后报错的解决办法
    【观察】OpenHarmony:技术先进“创新局”,持续创新“谋新篇”
    搭建hexo个人博客
    Django: 事务 transaction.atomic
    Item 38: Be aware of varying thread handle destructor behavior.
    Asp.net core IdentityServer4与传统基于角色的权限系统的集成
    Linux:权限是什么
    WPF/C#:异常处理
    MySQL——八、MySQL索引视图
    华为OD机试真题【篮球比赛】
  • 原文地址:https://blog.csdn.net/qq_37974755/article/details/126304583