git 多人协作开发的工作流程

avatar
前端

前景

分享这篇文章的目的主要是在于为不熟悉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, 回滚 等等,有很多使用的命令,待你去发掘和使用。