前景
分享这篇文章的目的主要是在于为不熟悉git多人开发模式的同学提供一些帮助。
多人协作开发,一般都有一个仓库,仓库的分支一般也有区分,比如:开发环境分支、测试环境分支、线上环境分支。
在多人协作时,代码规范很重要,在提交代码后有个重要的环节就是code review, 相互review代码,避免一些难以维护的代码入库。
分享
第一步:以github为例,先fork对应的仓库到自己的仓库上
第二步:然后就是在本地电脑上clone下自己仓库上的代码。
git clone xxxx (ssh地址)
这里需要做的一步是,在本地开发环境关联下原仓库的地址
git remote add upstream <原仓库地址>
第三步:如果你准备进入开发了,就切换个开发的分支
git checkout -b xxx origin/master
如果在上一步不知道远端仓库的前缀是啥,可以运行一下命令
git branch -a 查看分支
第四步: 在开发完后,需要提代码,提交的规范也要注意,下面举几个简单的例子
git add .
git commit -m"name: content"
这里有一定的规范:
name content
fix 一般是修复bug
feat 一般是新增功能
style 修改样式
...
第五步: 就可以提代码了, 先推到自己远端的仓库
git push origin master
第六步: 将远端仓库对应的分支,合到fork过来的仓库里,一般合到master,进行开发测试。那怎么提呢?如下图
点击原始的仓库,下面有个pull requests, 可以看到new pull request按钮
base为原仓库,head为fork仓库。
到这里有的同学是不是觉得已经能完全能够使用git进行多人的协作开发了,那还不够哈,多人开发还会出现一种问题,就是冲突。
解决冲突
有同事已经将他提的MR合到了源仓库中,并且有和你一样的改动地方,就会造成冲突。那解决冲突的做法有两种:
拉取源对应的分支进行合并
git pull upstream master
这种做法默认的是用merge来合并分支,当解决完冲突后,就可以进行
git add.
git commit -m"xxx"
可以发现的是,当你打印log查看commit时,记录会多出一条合并记录
但是以上的做法,可能会出现很多commit信息,这会让人觉得很乱,这里可以使用
git rebase -i 处理多条commit的信息,将其整合成一个
最后提交的记录就是很干净的一条commit信息。
git rebase的使用
比如我们有三个新增的commit,分别为: feat: 1, feat: 2, feat: 3,如下
假设此时我们已经解决了冲突,你可以运行下面的命令, 用来处理需要处理的commit
git rebase -i HEAD~3
当运行上面的命令,会出现下面如图所示的效果,下图是经过修改后的,把二、三行从pick改成f, f具体的意思就是:类似于squash,但是不保留commit 信息。
然后退出保存,就是下面的效果,也就是将多余的commit 信息合并,提交到github时,就很干净,已经将feat2和feat3合到了feat1。
总结
经过上面的分享,关于git的工作流程应该都已经大概了解了,但是程序员最忌讳的就是似乎懂了,应该要手动的去试试,才能真正的掌握。
补充:git 还有很多在工作中很有用的命令,比如
git cherry-pick commit-id,将对应的commit pick到现在的分支里git reset --hard commit-id, 回滚 等等,有很多使用的命令,待你去发掘和使用。