Git可视化工具Fork与Git 规范_fork git
概述:因为Git指令繁多,如果有实用的工具能够代替指令,可以提高效率,实现复杂的Git操作,降低合并出现冲突导致代码覆盖的问题,以下会介绍比较主流的在fork上的git操作
Fork下载链接:https://git-fork.com/
Git下载链接:https://git-scm.com/downloads
Git配置教程:Windows配置git,mac配置git。
git和Fork的关系,git是管理项目的工具,而Fork是对git进行一个可视化操作的工具。
这个工具是免费的,直接根据mac或者widnwos电脑下载就行
介绍Fork基本信息
现在以B2B移动端Flutter项目仓库为例子,进入这个fork后是不会打开已有的git仓库,所以不会看到下面的界面,所以可以打开左上角的File 去Open一个已有的项目就可以进入这个界面
Mac和Windows的按钮文案一样,可能只是位置不一样,Open一个已经连接了远程仓库的项目就行,现在我们公司组织已经允许fork访问github仓库了
拉下来你的项目之后就能看到刚才那个界面了,以下是对每个区域的一个解释
如果一开始没有登陆你的账号,这个时候你要去操作远程分支的话都是没有权限的,这时候点开accounts
像我现在B2B项目仓库是在github上面的,这个时候我选择登陆github就可以了,如果有gitlab项目也要拉的话,就可以点击这个图里面的+号,添加你的gitLab账号或者其他仓库管理工具就行
分支基本知识点
首先对于git本地和远程概念模糊的只会基本推拉的读者介绍一下这部分内容。
远程分支:在git管理仓库里面的分支,比如b2b是在github里面管理的,现在有下面这几种分支,都是称为远程分支。
本地分支:通俗易懂就是本地电脑中存储的分支叫做本地分支,你在推到远程分支上之前,你改写的内容只能保存在你当前的项目目录里面,如果你把你这个项目删了,git记录没了,那就GG了,包括电脑开不了机了,没有任何办法拯救你写的代码,除非你把他推到远程分支上去了,所以要保持下班前推一次代码的习惯,并且多人协作的话,写了两三天才合并,就容易代码冲突,冲突多了就容易代码被覆盖。
一般来说如果是新项目你是没有本地分支的,这个时候需要从远程分支上去Checout 一个下来,他就会复制一份这个分支上的内容到你本地分支上,点击track,你本地分支列表就会多一个同样名字的本地分支了
如果本地分支在Fetch后有这种向下的箭头👇,比如dev上是3👇,代表远程上有3个提交的commit需要拉下来,如果是向上一个比如,1👆,代表你commit了一次,这时候需要push到远程分支上去,如果只是commit了,你电脑爆炸的话,这部分代码也是找不回来,那有bro就问了:“为啥我不能commit之后直接push呢,哪里有人这么傻呢,commit后还不push”,这个问题问得好,因为后面如果公司启用了代码审核,会把dev分支开启一个权限校验,你可以对着dev进行commit,但是你发现push不到远程,在这个有权限校验的条件上,你就需要从dev拉一个分支下来,在这个自己的分支上进行推拉,如果我们要把分支上的代码推到dev上去,需要我们在代码管理仓库里面去发起一个合并申请,俗称提交一个“Pr”,可以看下面图片就知道具体是啥流程了,创建pr的时候指定你自己的分支,然后再指定一个目标分支,填写提交的内容注释,就会交由有权限的人去review你的代码,并且可以在pr里面评论你的代码,然后你再改完之后push到你现在提了pr的分支上,然后再pr里面评论已修改,通知review你代码的人,飞书是可以接这个pr的通知hook的。
然后是commit和push操作如下图里面,注意这个Unstaged和Staged部分区别,Unstaged是本地修改的文件但是不需要commit的区域,Staged是当前需要commit的部分
选择当前需要commit的文件后,commit按钮就会高亮了,commit后就会变成下面第二张图的样子,这个地方我特意保留了3个commit没有pull下来,其实我建议在commit前做一个Stashes操作后pull下来解决冲突(不了解Stashes可的可以先看下面的Stashes部分内容),再commit会好点,不然出现这种情况后就不能在当前目录下继续修改了,这个情况如果出现冲突,则只能变成commit了,额,这个地方说不太明白,只有处理过才会知道是个什么样子,尽量按我说的方法来好点,下面图2这个情况需要先pull再commit,执行完后就会变成图3的样式,pull的东西就会和你本地代码和commit的内容直接merge了,这个时候一起推上去就ok了。
Tag标记版本
然后是介绍一下Tags,这个我目前主要用来在Flutter打包发给客户版本的时候会打个Tag,然后说明当前这个分支是发个客户之前的最后一个版本,这个时候也可以CheckOut这个分支,但是会产生一个临时分支命名会HEAD,这个临时分支我很少去操作过,如果要回溯的话也不会用这个临时分支,而是从之前commit的内容部分直接New Branch拉一个新分支会好用点,感兴趣的可以去了解下这个HEAD临时分支具体用法。
另外这个tag最好是写点注释到里面,以免tag多的时候忘了这个版本是干啥的,打完一个tag还需要把它push上去,其他人才能看到这个tag信息。
Stashes操作(临时保存你本地修改的文件)
这是git一个非常非常非常非常非常非常好用的操作,甚至是我很高频的一个操作。
有一个场景:有一个其他协作者那里有非常重要的代码需要合并到你的分支里面,如果你写代码写了80%了,有些代码甚至还爆红,甚至有代码审核机制导致不能短时间提交pr审核通过,这个时候你pull代码是绝对拉不下来的,git会提醒你本地有修改,请你先commit后再pull,这你不炸了吗,现在又不能提交,又需要pull,这个时候选择Stashes你现在本地代码,做一个临时保存的操作。然后你现在可以pull代码下来了,pull后你再去把stashes里面的内容复原,双击两下比如下面的4555555的文件(这个名字是我随便敲的,因为只是用来临时保存,没有特别多的意义的情况下随便命名就行),点击apply就可以复原你本地修改的代码了,一般可能会有代码冲突,这个时候就去解决冲突就行了,没冲突当然是最好的。
进阶用法:如果你有重大修改,或者你想做一个尝试性的代码操作A时,可以临时stashes目前的代码,注释写下面这张图里面的内容:“备份当前代码”啥的,然后再去点击还原这个临时文件,比如下面不勾选的时候,apply还原是不会删掉这个临时文件的,如果你的操作A没有成功,并且改动了大量代码,想要还原备份时候的代码,可以把本地修改的代码全部删掉,再点击这个临时文件还原你当时修改的文件。
最后,如果当前没有对dev开启权限,但是想要规范每个人到自己的分支上操作,然后做完一个功能后从分支merge到dev上可以看如下图的按钮,checkout到dev上,然后对着你想要合入的分支进行Merge into到dev就行了,
Cherry-pick Commit 操作
不是很高频的操作,但是这个操作是进阶用法,这个功能是在当前分支去把某个分支的commit给合并到当前的分支上,就比如下面图2就把远程上有的commit给拉到本地分支上去了。
不小心合并了别人故意删代码的分支,或者合并丢失了代码,这个操作也是能够拯救你当前分支的。
Git提交规范
最后是提交的时候,我们公司git规范如下,不是特别强求这个太具体,新功能就feat,修改原有功能就refactor,修复了bug就fix就行。
- feat : 新功能
- fix : 修复bug
- docs : 文档改变
- style : 代码格式改变
- refactor : 某个已有功能重构
- perf : 性能优化
- test : 增加测试
- build : 改变了build工具 如 grunt换成了 npm
- revert : 撤销上一次的 commit
- chore : 构建过程或辅助工具的变动
像下面图里面这种提交,估计自己都不知道提交了啥吧,而且短时间里面提交多次无意义的commit,去回溯的时候就会脑壳痛,所以规范每一次commit频率都是有意义的,能读懂的是有必要的,具体规范在最下面;
我一般提交的时候是如图下面这种,[component][feat] 粗略的注释xxxx,第一个括号里面的内容是操作的哪个目录,第二个括号是对这个目录进行了什么操作,然后在下面的description框里面写比较具体的详细说明。
具体提交规范
每次commit的时候最好是一整块或者一小块功能,比如订单模块里面完成了增删查改接口,那这个commit提交的时候就写[order][feat] 新增了订单的增删查改,如果有bug或者未完成的逻辑,可以在description里面添加详细说明,写自己某个已知的bug没时间改。前端也是如此,其实能写清楚当前这个commit的内容就已经满足了最低的commit要求。
还有一个git的rebase操作我就不在这里描述了,很少有公司这么干,感兴趣的可以去网上查看,它这个和merge的区别在于git图谱树的结构不一样,merge则是能够看到在某个节点做了某些操作,rebase合并后会使得图谱变成线性的一条直线,它唯一的优点就是回溯到某个节点比较明确,但是对于team的规范性很强,所以不是很推荐这么搞。
git相关内容大概就是这些了,满足了90%的git开发会遇到的情况,如果有更好的git建议,可以在这个文档里面加评论。并且fork好像在连接github仓库推拉有时候会比较慢,连接GitLab就没有这种问题,推拉比较慢可以用GitHub Desktop,只不过里面不支持某些比如Cherry-pick,stashes操作,还有他的git图谱有点拉胯,有时候推拉有问题我都会用GitHub Desktop推拉一下。
还有不小心commit了,直接在控制台里面输入:git reset --soft HEAD^(软撤回上一次提交,会将commit的内容恢复到工作空间,也是一个很高频的操作,但是fork没有这个功能,一般命令行执行这个)
结束,撒花