文章目录
- 前言
- 基础
- Gerrit
- 1.克隆
- 2.新建本地分支和checkout
- 3.添加到暂存区
- 新增文件到暂存区
- 修改已经添加到暂存区的文件
- 取消添加到暂存区的文件
- 4.提交到本地仓库
- 在不重复提交的情况下,修改本次提交
- 5.提交到远程仓库
- 6.评审
- 其他辅助命令
前言
目前也算是工作一段时间了。之前写的git基本操作一直放在草稿箱里面没发布。这次就打算跟着这一起给写出来做一个总结。
基础
git操作
Gerrit
我们公司用的是Gerrit,跟我们常用的github和gitee上的一些细节还是有点差别。这里详细说一下。
Gerrit的核心是企业级评审,而他评审的核心是changeId。所以,在使用Gerrit的时候,最重要的是保证changeId是不能变的,但是commit 那一串的Id会随着我们的提交发生变化,这个是可以的。下面我将按照git工作流程来对我工作上常用的git操作进行总结。
1.克隆
工作中的克隆的时候,依然跟我们平常一样,注意设置好ssh,以及设置user和email。在企业里面,如果你的企业比较大,需要注意的就是,你可能会没有代码仓库的权限,以及,没有代码仓库依赖的代码仓库的权限(人家的开发用的基础框架都是自研的),找leader申请吧。
2.新建本地分支和checkout
这个没有什么好说的,唯一需要注意的点在于,你们公司用的是什么git工作流。这影响你对代码的管理(你当然可以在本地的master分支开发,但如果你同时要做n个需求,你再像之前那样在master分支开发,代码的管理就会很困难)
3.添加到暂存区
我在没上班之前,我就喜欢直接git add .
,很爽。搞了一次之后,我就老实了。如果你直接全部添加的话,我一般还会写一些不想添加到仓库的代码(比如测试代码,比如编译之后的文件,比如日志等等,这些按照要求是不能添加到代码仓库的)。如果你直接git add .
你的领导在review的时候,就会跟你说这个不行。让你给删,再评审。就比较麻烦。
正确的做法是
新增文件到暂存区
git add 文件名
修改已经添加到暂存区的文件
git add -u 文件名
取消添加到暂存区的文件
git reset 文件名
上面基本就是我最常用的命令了。
4.提交到本地仓库
这里需要注意,我们公司每次开发一个功能或接口,都会创建一个开发卡片。没有绑卡片都提交不到仓库里面。
git commit -m “[卡片编号]本次代码的描述”
在不重复提交的情况下,修改本次提交
这个命令真的是我使用频率最高的命令了,当你的代码被打回来,需要修改代码,但是你的changeid还不能变,你还不能重复commit。那应该怎么办呢?
git commit --amend --no-edit
使用这个命令,当你把你新写好的代码给add 之后,你就能在不改变changeid的情况,把新添加的代码给放到当前的commit上。
如果你的代码改了,还想修改描述。
git commit --amend
它会出来你相关的提交,使用的vim编辑器。vim怎么操作就不多说了。
5.提交到远程仓库
还记得我上面说的,使用的是Gerrit嘛。他在这里的命令跟github和gitee有一点不一样。
他的流程是先评审在合并(其他的流程是先提PR,审查没问题后再合并,PR不会卡你的commit)
git push origin 需要提交的本地分支名:refs/for/远程分支名
这里需要注意的点
1.当你需要提交的时候,你才去从在远程的master分支拉出你需要提交的分支。
场景举例:
1.比如我现在开始写了统计相关的代码,我的本地分支叫Statistics。然后我还没写完我就在远程分支创建了Statistics。
2.经过1天的时间,你写完了代码,在这期间,其他人向master合并他的代码
3.你提交了你的代码,然后不合格,被领导打回来了,完全重写,你想reset,不小心把分支搞乱了,你把这个本地分支给删除了。然后你对master进行了更新,又拉了一个分支叫Statistics。
这个时候提交,你的提交会带着上一次别人更新的代码。原因是本地的master是最新的分支,但你远程的Statistics分支是基于上一个版本的master拉出来的,Gerrit可不管你是上一个还是最新的,它只看你两个分支的代码区别。
本人的亲身经历。
解决方法也很简单,把远程的Statistics给删了,再基于最新的master拉Statistics,你本地的分支是一点都不用变的,评审就OK了。
6.评审
Gerrit的评审可以在网页上写评论和和打分。打分分为-2,-1,0,+1,+2。通过就是+2。如果只想评论就是0。不想通过就是-2。评审完了就是可以合并了。趁着你还记得你写的代码,该合并就合并吧。因为你后面还要QA进行测试,QA还有其他的活,所以你合并完就快点QA联系。快的话,第二天就可以测了。如果当天测完之后,时间还早,上线时机合适,就可以上线了。(让你早点合并的原因就是,你现在还记得你的代码,要确保你没有把脏代码给合并上去,过几天,你自己都不记得你写的代码了,再让你上线你心里会发怵)
其他辅助命令
git status
git log -p
git log --oneline
git reset --soft commit-id