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
    2
    git checkout -b your_feature

    此时你可以暂时放飞自我,暂时忘掉git,全心投入到开发中了。
    不过为了你自己修改管理的方便,你可以在每一阶段,利用git将代码"快照"

    1
    2
    3
    4
    git 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
    2
    git checkout main
    git pull origin main
  • 解决冲突,合并commit

    1
    git rebase main

    此时你需要在main中新feature的基础上解决你的每一次提交更改于于提交信息。
    解决一个commit冲突,对文件中的diff进行取舍。

    1
    2
    3
    git 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

  1. 为什么使用git rebase 而不使用git merge

    git merge 会有一个合并提交,使用rebase相当于在新的main上解决冲突,在pull request 时不会有log冲突。本质上是先进行rebase后再merge,使merge为fast-forward形式。同时会使commit记录更加简洁。

  2. 在github pull request 而不是在本地合并到main

    pull request 的主语是项目拥有者 owner pull your request for add new feature


github 多人协作工作流
https://jfsas.github.io/2024/12/14/github-多人协作工作流/
作者
JFSAS
发布于
2024年12月14日
许可协议