github 多人协作工作流
0x00 Introduce
该工作流主要用于向多人合作项目中增加新的功能feature, 相较于一般的个人开发,合作开发工作流要求在个人的feature分支上开发后利用pull request 合并到main分支上。同时需要在本地处理conflict,远端pull request 进行fast-forward合并与代码审查而不处理conflict。
0x01 Start Develop
要对一个项目进行合作开发,你需要做的第一步是clone下github仓库。
1
git clone git@github.com:ABC/GEF.git
此时你本地就拥有了一个和开发所需要的文件和git记录。但你最好不要立马开始写代码
创建你自己的分支,并在该分支上开发
1
2git checkout -b your_feature
此时你可以暂时放飞自我,暂时忘掉git,全心投入到开发中了。
不过为了你自己修改管理的方便,你可以在每一阶段,利用git将代码"快照"
1
2
3
4git statu # 文件跟踪
git diff # 文件修改内容
git add .
git commit -m 'anything'
0x02 Push Your Feature(可忽略并在开发最后做一次)
将开发中的阶段代码提交到github中暂存
1
git push origin your_feature # 确保你现在在feature分支上
0x03 "Merge"
To Main
将主分支拉取下来,当我们开发feature时,主分支可能有更新。拉取可以同步更新
1
2git checkout main
git pull origin main解决冲突,合并commit
1
git rebase main
此时你需要在main中新feature的基础上解决你的每一次提交更改于于提交信息。
解决一个commit冲突,对文件中的diff进行取舍。1
2
3git add <file> # 提交你解决冲突的文件
git rebase --continue #继续解决下一个commit的冲突
# 修改提交信息,可以不更改 `Ese` , `:q`直到所有的commit冲突解决完毕,具体的冲突解决和commit信息合并技巧等我多一些经验再解决吧<3.
rebase后解决冲突,此时commit中间会多出一些记录,这是main分支新增的feature,而你的commit会跟在这些记录之后。
重复操作
0x02
, 可能需要使用-f push在github上提交pull request,到此你的工作就完成了,应该由项目管理者同意pull request,同时可以使用squash and merge去掉多余的commit。
0xFF Attenton
为什么使用git rebase 而不使用git merge
git merge 会有一个合并提交,使用rebase相当于在新的main上解决冲突,在pull request 时不会有log冲突。本质上是先进行rebase后再merge,使merge为fast-forward形式。同时会使commit记录更加简洁。
在github pull request 而不是在本地合并到main
pull request 的主语是项目拥有者 owner pull your request for add new feature