跳到主要内容

github pr和变基合并提交记录

· 阅读需 6 分钟

根据上一篇博客,可以进行代码的提交,那么这里记录一下关于在 github 上面提交 pr 的时候遇到的一些问题等。

pr 提交

在我们需要对一个仓库进行代码贡献的时候,先 fork 代码到自己的仓库,然后在本地去 clone,这是一般的比较标准的流程。

那么在 clone 完之后,本地会自动初始化一个仓库,这个仓库和 github 管理的仓库的版本是一致的,由于 github 的远程仓库是刚从需要贡献代码的仓库 fork 过来的,那么它们 2 个仓库的版本也是一致的。

因为我们是提交 pr,所以实际上对贡献代码的版本管理是管理员去进行的,我们只需要管理我们自己的仓库就行了,那么我们要做的就是在这个版本的基础上面去修改代码,然后提交到远程仓库,这样在远程仓库中就有了一些提示,其中就有contribute等等(也可以到贡献仓库中去 new Pr,也可以识别到代码的更改)。 我们进行contribute之后就会生成一个prpr中展示了我们的仓库的一些提交记录,可以看到修改了哪些内容等等。 对于提交的内容,别人可以在代码出进行评论等,等待没有任何分歧之后,管理员可以去允许合并代码。

合并提交记录

这里合并提交记录用到变基,通过强制推送来达到远程仓库和本地仓库保持一致的干净提交历史记录,在使用的时候一定要把握代码的安全性,以防因为强制推送带来代码的冲突等导致代码损失。

pr 中提交多个代码,导致 pr 中的提示信息杂乱 —— 变基

比如我们提交了一段代码,但是有人说这个代码有些地方不好,于是我们在提交了第一次的版本上又进行了更新和推送,那么我们的远程仓库就比贡献仓库多了 2 个提交记录,在 pr 中也会有相应的提交记录提示。此时我们发现有个地方写错了,我们修改后又提交了一个记录。

根据上述的情形,已经提交了 3 条记录,其中第 1 条记录是我们的第一个修改思路,第 2,3 条记录是对第 1 个记录的优化,显然我们不需要将第二次优化分成 2,3 这两条记录,我们需要做的就是变基,将 2,3 条记录中的代码通过变基将提交记录合并到 2 中,远程仓库中以及 pr 中多余的提示信息都会相应的被合并。

首先我们要做的就是通过git log来查看 commit hash 值以及查看 3 条记录信息。

git log

输出的内容将会是这样

第三次提交内容 21j31239802173124h12h
第二次提交内容 128930218312j312mn3lk
第一次提交内容 ji123n21jk3kj21h312h3

接下来我们使用变基,通过指明一个我们想合并到的一个能让提交 log 信息变干净的一次提交记录的 hash 值,像下面这样

git rebase -i 128930218312j312mn3lk

然后就会输出下面的信息。我们要做的就是把前面的 pick 改成 drop,这样的话,输出的这几条记录就会合并成 pick 的这一条记录。

- pick 第三次提交内容 21j31239802173124h12h
+ drop 第三次提交内容 21j31239802173124h12h
pick 第二次提交内容 128930218312j312mn3lk

完成之后,通过vim的命令!wq来保存退出,会输出一些完成 rebase 的内容。

我们再次通过git log来查看,发现前面的三条记录现在只剩下了两条。但是远程仓库中实际上还是三条提交记录,那么我们要做的是推送当前仓库的提交。

在保证没有任何的代码冲突以及远程代码的最新提交,保持好 rebase 不会带来所有损失的情况下,用git push --force ....来进行强制推送。在完成之后,远程仓库以及引用了第三次提交记录的信息都会被删除,这样也就保持了提交信息的干净。