Github rebase

首先前提是是在 github 上参与多人的项目。因为每个人写的提交的时间不一致,互相之间的提交可能参差不齐,不方便阅读。
所以为一个多人项目写好某个功能点的时候,或者是你 fork 了某个项目想要 PR 给原项目的时候,最好能够把提交的记录都各自重排一下,把各自一块的提交排列到一起,保持历史记录的可读性。

为了做到这个,在开发新功能的时候最好先建一个新的分支。在分支上写好之后(这个时间跨度不一定),先把原项目上最新的代码拉去到本地。然后再切换到你开发新功能的分支进行 rebase。

git checkout master # 确保你当前在 master 中
git remote add author git@github.com:你参加的库作者/库名.git # 将PR目标项目以 author 的别称记录在本地
    # 只需添加一次, 未来可以复用
git fetch author # 获取目标库最新代码
git status # 常看一下当前是不是在 master 中
git merge author/master  # 将目标库最新的代码合并到你的 master 中
git checkout your-branch # 切换到你的分支库中
git rebase master        # 参照最新的代码开始重排
git push origin your_branch # 你可能需要使用 `-f` 标志,如果需要的话加上 `--all`

其中拉取最新的代码也可以直接用 github 的 pull request 功能,将别人的代码拉取给自己。

另外,一些老外的教程里面也喜欢把上述代码中的 author 改名字叫 upstream。博主个人看法是:Anyway,名字随你改。

过程说起来有点简单,不过博主原来一直不清楚为什么要 rebase,还以为 rebase 是为了去掉 “Merge pull request #xx from xxxx/xxxxx” 这种没什么意义的东西。真是黑历史,来 mark 一下。