• gitflow工作流程思路


    系列文章目录

    提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
    TODO:写完再整理

    文章目录


    前言

    认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!

    本文先对XXX做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章


    提示:以下是本篇文章正文内容

    一、git是分布式代码版本控制软件

    1.git的介绍

    Git是一个软件,所以需要安装。
    Git的作用是代码版本控制。如:代码多版本保存,代码托管,代码回滚、代码合并
    Git是分布式的。如:本地库管理、远程库管理(两个库都有历史版本)
    在这里插入图片描述

    2.安装git软件

    git如果装在自己电脑上就可以进行自己电脑的代码版本控制,但是不可以上传远程仓库(远程仓库就是github和gitlab的网站形式)
    在这里插入图片描述
    linux和mac使用的是命令行安装,win使用的是安装包安装
    1、linux装git方法

    $ sudo apt-get install git
    
    • 1

    2、Mac装git方法

    $ sudo yum install git
    
    • 1

    3、win装git方法
    官网
    https://git-scm.com/downloads

    3. git各分区及切换逻辑及命令【重要】

    在这里插入图片描述
    工作区:正在执行修改操作的文件
    暂存区:托管暂时修改完成的文件
    版本库:发布整个工程完整的文件
    其中工作区和暂存区的文件可以使用 g i t s t a t u s 查看,版本库的文件可以使用 git status查看,版本库的文件可以使用 gitstatus查看,版本库的文件可以使用git log查看
    .
    .

    二、本地仓库版本控制

    1.进入要管理的工作空间(文件夹)

    cd XXX
    
    • 1

    2.初始化git

    $git init
    
    • 1

    之后会出现.git的隐藏文件,该文件是用于版本管理的

    3.检测工作空间中的文件的状态

    $git status
    
    • 1

    用于检测改文件夹下各个文件的修改状态

    【红色:未被管理的文件或者你修改过的文件】
    【绿色:已经被管理的并且没有被修改的文件,并且没有commit生成版本的文件】
    【若出现nothing to commit.working tree clean,代表了现在是最新的版本,文件夹中的任何文件都没有被修改过】

    4.添加管理的文件

    $git add XXX
    
    • 1

    已经被管理的是绿色的,未被管理的是红色的
    $git add .是添加所有未被管理的文件
    理论上修改过内容的文件都要添加到管理中

    5.生成版本号的

    $ git commit -m”XXX”
    
    • 1

    6.查看各个版本的记录和信息

    查看详细信息

    $git log
    
    • 1

    把版本提交记录以图形的方式显示出来

    $git log --graph
    
    • 1

    7.版本库回滚

    (1)历史版本回滚的目的
    开发了一个业务,但是后面这个业务不需要了,就不用在现在的版本上进行删除,直接拿上一个版本的代码用就行了。

    (2)回滚历史版本指令

    $git reset --hard <版本号>
    其中,版本号可以通过$git log中的commit查看到
    
    • 1
    • 2

    (3)回滚到现在版本的指令

    1、先使用$git reflog查看
    2、再使用$git reset --hard 版本号
    注意:git的终端信息是按着倒序排版的
    
    • 1
    • 2
    • 3

    异常问题

    (1)个人信息配置:用户名、邮箱(按照run来输入指令来配置就行)
    在这里插入图片描述
    配置成功后,每次显示版本号的时候都会显示用户名和邮箱了
    在这里插入图片描述

    三、分支

    1.分支的作用

    开发新的业务功能和单独修复bug的时候会用到

    新建分支是为了并行处理多功能开发(或者bug修复)的需求的–开发一个功能不影响另外的功能开发

    分支的本地管理是相互独立的! 切换分支和回滚的操作都会使得代码改变
    在这里插入图片描述

    2.查看当前分支

    $git branch
    
    • 1

    3.创建/继承分支

    $ git branch <分支名>
    
    • 1

    注意:在某分支代码上新建一个空的分支要先切花至被继承的分支上

    4.切换分支

    $git chekout<分支名>
    
    • 1

    5.合并分支

    (1)子分支代码合并到主分支上的步骤

    (1)先切换回去主分支。如:$git chekout <主分支名>
    (2)在主分支上把子分支的代码合并过来。如$git merge <子分支名>
    
    • 1
    • 2

    Merge 要分清楚是哪个分支合并那个分支
    当前在哪个分支就是把其他分支merge进来那个分支。如:把dev分支merge进来master分支,就在master分支上输入指令$git merge dev

    (2)合并分支冲突的原因

    在这里插入图片描述

    1、由于主分支master是大家维护的,主分支master上的更新速度是比个人开发的dev分支要快的,当个人的dev分支开发完成后,想要合并merge到主分支master上时master会产生很多冲突。
    如:当同一个master分支中前后代码不一致的时候就会产生冲突,如你copy了master1.0的代码进行开发,当你开发完成并要进行合并的时候,master分支已经升级为master2.0,当你merge你dev新的代码的时候,不仅仅会把dev的代码加入进去,还会把master1.0的代码加入进去,这时候master1.0和master2.0的代码会产生冲突!

    2、在本地仓库和远程仓库的代码不一致,开发的时候没有实时更新两个仓库导致偶然冲突,改变了同一个文件的同一段代码
    如:在原有的代码上进行改动就很容易产生冲突(相同名称和文件等等),新增代码不会产生冲突的!

    提示
    在这里插入图片描述
    代码注解
    在这里插入图片描述

    (3)合并代码原则

    1、把修改丰富后的代码merge到以前的代码
    2、尽量保证本地仓库的代码合远程仓库的代码保持一致
    3、要合并到哪个分支上就切换到哪个分支上进行操作!

    (4)解决冲突的办法

    遇到代码冲突问题需要手动进行代码对比,找到冲突的地方,沟通解决!!
    Code compare! (这时候就需要有人做code review,这时候就要用到vscode的插件或者beyond compare工具)

    (1)方法一:【管理的比较好,自动化】先把master主分支的代码合并到个人dev上,把dev分支进行丰富更新【用于添加大家修改过后的代码】(简单的处理一下冲突)。再把自己的dev分支merge到主分支上【用于添加自己修改的代码】

    (2)方法二:【管理的比较差,手动化】手动code compare工具来处理冲突,选择代码【merge失败自动在代码上添加冲突的标识符号和对应的代码】

    (3)方法三:【管理的比较差,手动化】拉取最新的master代码,在这个基础上加入自己的代码

    (5)避免频繁的进行代码冲突处理的方法

    代码开发最好是一直用一个版本,一口气开发直到开发完毕,不然很难避免要处理合并冲突的问题!

    (6)推master分支和推自己分支的区别

    merge代码会产生冲突,push代码也会产生冲突。
    1、merge因为推送去主分支上的,要人工排除冲突因为是大家一起写的(小组长code review和沟通)
    2、push因为推送去个人分支上的,若都是自己写的可以force(git push origin dev --force)

    若推送到master上才需要合并merge(需要解决合并冲突和代码review),若推到自己的分支上则不需要进行review,修改代码后如果出现代码冲突可以强推

    $git push origin <自己的分支名> --force
    
    • 1

    (5)解决merge冲突的软件工具

    (1)beyond compare
    在这里插入图片描述
    在这里插入图片描述
    (2)vscode的插件

    6.删除分支

    $git branch -d <要删除的子分支>
    
    • 1

    注意:要在master分支上进行操作

    四、远程仓库托管(项目>分支>版本)

    在这里插入图片描述

    1.Git与github\gitlab的区别

    Git和github\gitlab是两个不同的东西,git是一个软件,Github和gitlab都是一个云端网站而已。
    github是开源的公用仓库,gitlab是使用公司硬件服务器自己搭建的一个私有仓库
    因此,在本地库建立分支和远程库建立分支的实质是不一样的

    2.使用远程仓库的方法

    (1)注册一个github账号

    (2)在github中新建一个仓库

    在网页上按提示操作就行
    在这里插入图片描述

    (3)本地代码推送到远程仓库

    推送后,远程仓库和本地仓库的分支还是其他都是一致的(远程仓库可以理解成百度网盘,本地编辑好了代码只管网上推)

    1、添加远程链接(给远程仓库的地址起一个别名origin)

    $git remote add origin <远程仓库的地址> 
    注意,origin 代指的就是远程仓库的地址,起了别名之后除非是换了远程仓库,不然不需要重新设置origin
    
    • 1
    • 2

    2、向远程仓库推送代码

    $git push -u origin <远程仓库的一个分支名>
    在origin远程仓库的地址上推送本地库一个分支的所有版本的代码
    
    • 1
    • 2

    -u 的意思是默认操作的意思,试过一次git push -u origin <远程仓库的一个分支名>的指令,下一次直接git push就行了,默认推送到上一次的远程仓库和分支,当要修改推送的分支的时候再写一次**git push -u origin <远程仓库的一个分支名>**来重定向一次就行

    $git push 如果只有这个指令,就是代表把本地库上的当前分支推送到远程库上次默认的分支上(一般在本地仓库地址当前的分支上操作,默认就是推当前分支!)

    养成良好的习惯,一般就每次推送代码都加上远程库的分支名

    $git push origin <远程仓库的一个分支名>
    
    • 1

    (4)rebase过程版本及信息合并推送

    (1)过程版本的定义
    没有上传远程仓库的版本称为过程版本
    在这里插入图片描述
    (2)rebase作用一
    把自己在本地仓库串行开发中的多个提交记录整合成一个提交记录,推送github只有第一个版本和最后一个版本

    第一步:git rebase 分支名

    方式一:指令:**git rebase -i <倒数第n次的版本号>**  
    这样就合并最近n次提交的版本信息
    
    方式二【推荐】:指令:**git rebase -i HEAD~n**  
    这样就合并最近n次提交的版本信息,n是一个数字、
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    第二步:修改要整合的版本
    把要合并的版本的pick 改成S,最后在 vim中保存退出:wq

    第三步:修改要整合的信息
    在这里插入图片描述

    (3)rebase作用二
    把并行开发的版本的记录强行插入主线分支中,版本提交记录并行边串行
    1、先切换到要插入主线的版本分支dev,把要插入主线的版本作为一个“基”

    $git cheakout dev
    
    • 1

    2、然后把要插入主线的版本分支记录插入主分支。

    $ git rebase origin master
    
    • 1

    3、最后把dev合并merge到master上。

    $git merge dev
    
    • 1

    (5)从远程仓库中下载代码

    $ git clone <远程库地址>
    
    • 1

    注意:拉代码是一拉全部分支都拉下来,推送代码是指定远程库分支,一个一个分支去推

    (6)切换远程仓库分支

    $git chekout <分支名>
    
    • 1

    (7)拉取最新的代码

    $git pull origin <远程库的一个分支>
    
    • 1

    如果你没有下载过工程代码就用$git clone,如果你有下载过代码了就更新一下代码就行了,在最新的代码上进行开发
    注意:主要在本地仓库对应的分支上拉取远程仓库对应分支上的代码,保持本地仓库的分支名和远程仓库的分支名一致

    拉取代码的原则
    $git pull的操作只能一个一个分支进行拉取更新

    五、多人协同开发gitflow工作流程思路

    1.标准的gitflow工作流图【重要】

    每一个人都有自己的分支,自己维护自己的分支,在自己的分支上写代码
    /master主分支是上线的代码
    /dev是架构师merge和review的代码
    /self分支
    在这里插入图片描述

    2.创建初始项目和版本

    在这里插入图片描述

    3.修改项目版本号

    在这里插入图片描述在这里插入图片描述

    4.开发成员注册一个github/gitlab的账号

    在这里插入图片描述

    5.添加开发成员并设置权限

    在这里插入图片描述

    6.开发成员在自己的分支上进行开发

    (和上面说的步骤是一样的)

    7.架构师或小组长code review–Pull/merge request

    (1)经过以下设置,开发成员想要pull或者merge代码就要先申请权限去code review
    在这里插入图片描述
    (2)开发成员申请小组长review
    这个过程就像导师修改你的论文,小组长会看你的代码,审查逻辑和格式有没有问题,然后体格提意见让你修改,你觉得合理的就修改,不合理就说明原因

    github如下操作:
    在这里插入图片描述
    注意在Markdown的MR描述中,换行需要结尾添加两个空格(markdown语法)

    gitlab如下操作:
    提交merge requests的方法在网页上进入merge requests栏,点击右上角的new merge requests即可
    在这里插入图片描述

    (3)小组长进行推送与合并异常处理,并删除开发成员原有的开发分支
    (申请把自己的分支合并到master分支上–异常冲突小组长和开发成员沟通处理)

    8.小组长或者测试人员提测上线

    (1)创建一个测试发布版本

    $git checkout -b release1.0【在dev开发稳定的分支上】
    $git push origin release1.0
    
    • 1
    • 2

    (2)测试人员获取版本进行测试,没问题测试人员就提交到master,有问题就反馈bug

    (3)开发人员另开一个分支进行修bug【一般在这个阶段不进行新的业务开发】

    六、远程开发的方法

    使用gitlab(github就不用了),在非公司的地方开发代码的方法就是做一个访问公司服务器的vpn
    在这里插入图片描述

    在这里插入图片描述

    .
    .

    七、拉取代码与推送代码

    1.从master拉取代码下来并copy并切换到自己的分支上的方法

    1、切换到master的分支上
    2、git checkout - b <新分支名>
    
    • 1
    • 2

    git checkout - b <新分支名> 相当于git branch <新分支名> + git checkout <新分支名>

    其中,
    $git branch <新分支名>用于创建一个空分支并把master分支上的代码回滚到该分支上(若原来就有这个分支就直接切换,若原来没有这个分支就先创建再切换)

    $git checkout <新分支名>用于切换到该分支上

    注意:
    1、【继承关系】在本地仓库的哪个分支上创建新分支,新分支就是继承哪个分支的代码

    2、【搞一个属于自己分支来做开发】继承了主分支的基础上进行代码开发,不要直接在别人的或者上线的代码上进行开发

    3、SSH Key
    由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以在Github官网进行设置

    第1步:创建SSH Key
    在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Git Bash,创建SSH Key
    ssh-keygen -t rsa -C “youremail@example.com”
    你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可【防盗标记–盒子君hzj】
    如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

    第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面,设置SSH和keys
    在这里插入图片描述
    为什么GitHub需要SSH Key?

    因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

    当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。【防盗标记–盒子君hzj】

    确保你拥有一个GitHub账号后,我们就即将开始远程仓库的学习
    .
    .

    2.把本地仓库分支上的代码推送到远程仓库的仓库上的方法

    1、在本地仓库上先切换到对应的分支,如$git branch dev
    2、代码开发
    3、推送至远程仓库上对应的分支上$git push origin dev
    【成功后远程仓库就有自己的分支了】
    
    • 1
    • 2
    • 3
    • 4

    八、vscode编辑器的git插件

    gitgraph插件(相当于git log的可视化)

    (1)作用
    项目仓库的各个版本可视化及操作

    .
    (2)使用步骤
    1、下载vscode的gitgraph插件
    在这里插入图片描述
    2、点击左下角的 Git Graph图标,可以查看该.git文件中各个版本的继承及拓展关系,并可以查看修改的相关代码,或者进行一系列的版本操作
    在这里插入图片描述
    .
    .

    Gitlens插件(历史版本源代码对比)

    (1)作用
    项目仓库各个版本的操作及历史源代码对比

    1、可以看到各个commit的版本中修改了什么文件,与历史的版本对比得到修改的部分是什么(做review)
    2、可以对修改后的文件一次进行回退到历史版本(对于编译自动修改的文件)
    在这里插入图片描述

    (2)使用方法
    1、安装vscode的gitlens插件
    在这里插入图片描述
    2、在左边点击图标就可以进行版本可视化操作了
    在这里插入图片描述

    九、git 常见的问题处理方法汇总

    这个把之前的异常冲突的地地方进行回退

    $ git reset HEAD^
    
    • 1

    把文本内容退回上一次编辑的位置

    $ git reset <版本号>
    
    • 1

    历史修改的文件对比(用vscode 的gitlens插件更好)

    $ git diff <文件名>
    
    • 1

    总结

    重要的是学习git的原理和gitflow使用流程

    一般来说,远程仓库的分支名和本地仓库的分支名要一致,本地仓库一般不会存在很久的,所以,最好还是本地仓库和远程仓库的分支是一直的比较好

    我们只能切换本地仓库的分支,不能切换远程仓库的分支的!在本地仓库中创建和切换对应的分支直接推送到远程端时,远程端就有对应的分支了

    –代码开发版本要进行记录(每天写完或者开发完的功能都要写清楚,commit到自己的本地仓库)

    【搞一个属于自己分支来做开发】继承了主分支的基础上进行代码开发,不要直接在别人的或者上线的代码上进行开发

    git checkout 和git branch功能很像,$git branch更“厉害些”,git checkout - b是结合体!

    git add *.cpp

    git add *.h

    继承式创建分支推送!(本质上本地仓库的分支名和远程仓库的分支名没有关系,不同分支名也可以推送)
    Git push origin stuck_handle:stuck_handle

  • 相关阅读:
    基于VUE的酒店管理系统的设计与实现
    小程序需带参数跳转
    recovery菜单选项,添加风险提示弹框
    操作系统——死锁(银行家算法)
    发布Android库至MavenCentral详解
    [附源码]java毕业设计医院挂号管理系统
    pyautogui模拟鼠标拖动选中文字的基本知识(附Demo)
    SaaSBase:AdsPower是什么?
    java 从 HDFS 读取数据到本地文件
    Java实现加密(一)AES加解密
  • 原文地址:https://blog.csdn.net/qq_35635374/article/details/126090839