IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> gitflow工作流程思路 -> 正文阅读

[开发工具]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

2、Mac装git方法

$ sudo yum install git

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


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

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

把本地仓库暂存区的文件推送到远程仓库的某分支

$git push origin <远程仓库分支>

把远程仓库的某分支拉取到本地仓库的工作区

$git pull origin <远程仓库分支>

把远程仓库的某分支拉取到本地仓库的暂存区

$git fetch origin <远程仓库分支>

.
.


二、本地仓库版本控制

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

cd XXX

2.初始化git

$git init

在工作空间的根目录输入这行指令,之后会出现.git的隐藏文件,该文件是用于版本管理的


3.添加管理的文件

$git add XXX

理论上修改过内容的文件都要添加到管理中

注意:
1、添加管理的文件最好只添加源文件,因为有可能因为编译的原因会生成一些中间文件,导致一些中间文件和之前的中间文件不一样

$ git add *.cpp *.h

2、可视化管理源文件的添加管理add可以使用gitlens的源文件管理

3、git add .是添加所有未被管理的文件

$git add .

4.检查工作空间中的文件的状态

$git status

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

【红色:未被管理的文件或者你修改过的文件】
【绿色:已经被管理的并且没有被修改的文件,并且没有commit生成版本的文件】

【若出现nothing to commit.working tree clean,代表了现在是最新的版本,文件夹中的任何文件都没有被修改过】
在commit之前要保证现在各个文件的状态是最新的,没有没被管理的文件,如果有冲突还没有解决会报错误的
在这里插入图片描述


5.保存备份到暂存区,生成版本号

(1)方法一:生成新的版本号,添加新的版本说明

$ git commit -m"XXX"

(2)方法二:不生成新的版本号,不添加新的版本说明,但是修改了文件内容

git commit --amend

修改小组长review意见的时候可以用–要么按下面这么做修改,要么重新开一个merge requst的申请


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

(1)查看当前版本之前的详细信息

$git log

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

$git log --graph

(3)查看完整的版本信息

$git reflog

7.本地版本库回滚

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

(2)回滚历史版本指令

需要查看版本号的方法
$git reset --hard <版本号>
其中,版本号可以通过$git log中的commit查看到


不需要查看版本号的方法
$ git reset --hard HEAD^
^是回退一个版本

$ git reset --hard HEAD^^
^^是回退两个版本



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

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

异常问题

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


三、分支

1.分支的作用

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

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

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


2.查看当前分支

$git branch

3.创建/继承分支

(1)方法一:

$ git branch <分支名>

(2)方法二:

$ git checkout -b <分支名>

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


4.切换分支

$git chekout<分支名>

5.合并分支

(1)子分支代码合并到主分支上的方法

git merge origin <分支>与git rebase origin <分支>的区别
在merge合并不同版本代码的时候,变基rebase是经常用到的

1、方法一:若知道merge的代码不会产生冲突的时候,可以直接merge

(1)先切换回去主分支

$git chekout <主分支名>

(2)在主分支上把子分支的代码合并过来

$git merge origin<子分支名>

或者用下面的方式

(1)先切换去子分支

$git chekout <子分支名>

(2)在子分支上把代码合并

$git merge origin master

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

.
.

2、方法二:若是提前知道要合并的代码会产生冲突,先在子分支上进行版本rebase来解决冲突

使用下面的指令
(1)切换到子分支

$git chekout <子分支名>

(2)进行代码编辑插入,解冲突
merge requset之前,先在当前分支上变基rebase主分支master分支上的版本,目的是把自己修改的代码commit版本整合进去小组修改的代码commit版本中

$git rebase origin master

变基rebase整理合并多个人开发的版本的时候会产生冲突,手动code compare解冲突就行了,解完冲突后编译通过你现在的代码就是master最新的,且没有冲突的代码版本

,当没有冲突的时候就会自动合并到master主分支了

rebase是一个过程,会处于一个过程的分支,知道rebase完成,按着提示来就行,什么rebase --continue、rebase --amend、rebase --abort都是变基操作指令


(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)方法一:【rebasede 方法】先把master主分支的代码合并到个人dev上,把dev分支进行丰富更新【用于添加大家修改过后的代码】(简单的处理一下冲突)。再把自己的dev分支merge到主分支上【用于添加自己修改的代码】

(2)方法二:【code compare】手动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

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

(1)beyond compare
在这里插入图片描述
在这里插入图片描述
(2)vscode的插件
Code compare红色是之前没有commit的版本,绿色是现在修改的版本

.
.


### (8)merge request注意事项

当同一个分支申请主分支merge request合并没有通过的时候,再用该分支申请代码合并merge request是不行的,需要撤销之前的申请再去申请

(9)合并代码格式检查和编译检查,保证代码经过rebase可以直接merge到主分支

合并代码可以进行代码的格式检查和编译是否通过的自动检查

.
.


## 6.删除分支
$git branch -d <要删除的子分支>

注意:要在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

2、向远程仓库推送代码

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

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

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

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

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

.
.


(4)变基rebase,对过程版本及信息合并推送【合并merge代码中有用】

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

第一步:git rebase 分支名

方式一:指令:**git rebase -i <倒数第n次的版本号>**  
这样就合并最近n次提交的版本信息

方式二【推荐】:指令:**git rebase -i HEAD~n**  
这样就合并最近n次提交的版本信息,n是一个数字、

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

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

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

$git cheakout dev

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

$ git rebase origin master

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

$git merge dev

(4)可视化的rebase工具
整理本地仓库版本可以使用gitlens,输入指令$git rebase

使用gitlens中的可视化操作来变基rebase 进行本地不同版本的合并
在这里插入图片描述


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

$ git clone <远程库地址>

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


(6)切换远程仓库分支

$git chekout <分支名>

(7)拉取最新的代码

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

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

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

git强拉分支的方法
因为版本代码冲突,且本地代码不需要保留的情况下可以使用强拉分支的方法

git fetch --all
git reset --hard origin/master       master为你分支的名字
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.修改request问题单的技巧

步骤1、在本地仓库切换到问题单的分支及其对应版本

步骤2、修改代码并git commit --amend,改内容不改提交信息

步骤3、推送代码到自己分支上,推不上就force强推,当推送分支后,问题单的代码自动改变

步骤4、通知小组长再进行merge代码,直接merge看看成不成功,不成功基于rebase,直到成功后push


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

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

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

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

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


六、远程开发的方法

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

在这里插入图片描述

.
.


七、拉取代码与推送代码

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

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

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

【成功后远程仓库就有自己的分支了】

3.在git中基于哪一个分支都是可以进行push、pull和merge操作

操作是一个相对的,理解了文件数据流的方向就可以,总的来说遵循一个原则

在<>中的都是–<相对于当前分支的目标分支>


. .

八、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^

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

$ git reset <版本号>

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

$ git diff <文件名>

总结

重要的是学习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

merge requst和commit要经常做,有一点小改变就要做,不要改了一大堆之后才做,大幅度修改后在提交merge requst和commit会产生很多的冲突

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 11:04:10  更:2022-08-06 11:05:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/22 3:26:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码