开发流程概述

Pull Request 的一生

假设你已经 forkclone<your-username>/MegEngine 的代码:

# 基于上游的 master 分支,创建并切换到一个新分支用于开发
git fetch upstream
git checkout -b <branch-name> upstream/master

# 做一些相应的代码修改
# ....

# 做一些相应的本地测试

# 将修改过的代码提交记录到本地,并推送到默认的远端分支
git add <filenames>
git commit -m '<message>'
git push origin <branch-name>

# 跑到 https://github.com/<your-username>/MegEngine
# 根据相应的提示创建一个 Pull Request 并留下说明
# 开发者将 Review 你的代码并给出相应的答复
# 如果无需新的改动,则会被合入上游 master 分支

# 删除本地分支和远端分支
git branch -D <branch-name>
git push origin -d <branch-name>

如果你在发起 Pull Request 后有新增的改动,如果 Commits 记录很混乱, 为了保持历史记录的整洁,请使用 squash 或者 rebase 进行整理。

注解

一些开源项目要求避免使用 squashrebase 以保证历史记录的完整性,在 MegEngine 中提倡使用这些操作, 目的是防止出现过多的 fix 性质的提交历史,请勿滥用。

保持和上游同步

如果上游 master 分支有更新,为了避免存在冲突导致无法合并, 请同时更新你的本地 master 分支:

git checkout master
git pull upstream master  # pull = fetch + merge

接下来需要用 rebase 命令更新你所开发的分支:

git checkout <branch-name>
git rebase master
git push origin --force <branch-name>

这个过程中可能需要解决一些冲突。

注解

如果你已经用 git push origin <branch-name> 将开发分支推送到远端, 则在进行 rebase 后再次 push 时需要添加 --force 参数。

仅修改最后的提交

有些时候你只需要小修小补最后一次的提交,但不希望多出一次提交记录,可以使用:

git add <filenames>
git commit --amend
git push origin --force <brach-name>