维护者工作流程#

此页面是为维护者准备的——我们这些将自己或他人的更改合并到上游存储库中的人。

作为一名维护者,您完全掌握了 开发工作流程 中的基本内容。

将您的存储库链接到上游存储库 中的说明添加了一个对上游存储库具有只读访问权限的远程。作为一名维护者,您拥有读写权限。

最好为您的上游远程设置一个可怕的名称,以提醒您它是一个读写远程

git remote add upstream-rw git@github.com:scikit-image/scikit-image.git
git fetch upstream-rw

整合更改#

假设您有一些更改需要进入 trunk ( upstream-rw/main)。

这些更改在您当前所在的某个分支中。例如,您正在查看某人的更改,如下所示

git remote add someone https://github.com/someone/scikit-image.git
git fetch someone
git branch cool-feature --track someone/cool-feature
git checkout cool-feature

现在您位于包含要合并到上游的更改的分支上。本节的其余部分假设您在此分支上。

少量提交#

如果只有少量提交,请考虑变基到上游

# Fetch upstream changes
git fetch upstream-rw
# rebase
git rebase upstream-rw/main

请记住,如果您执行变基并推送它,您必须手动关闭任何 github 拉取请求,因为 github 将无法检测到更改已合并。

一系列长提交#

如果有一系列较长的相关提交,请考虑改为合并

git fetch upstream-rw
git merge --no-ff upstream-rw/main

合并将被 github 检测到,并且应该会自动关闭任何相关的拉取请求。

注意上面的 --no-ff。这会强制 git 进行合并提交,而不是进行快进,以便这组提交从 trunk 分支出来,然后通过合并重新加入主历史记录,而不是看起来像直接在 trunk 之上进行的。

检查历史记录#

现在,在任何一种情况下,您都应该检查历史记录是否合理,并且您拥有正确的提交

git log --oneline --graph
git log -p upstream-rw/main..

上面的第一行仅以紧凑的方式显示历史记录,并带有历史图的文本表示。第二行显示不包括可以从 trunk ( upstream-rw/main) 到达的提交的提交日志,并包括可以从当前 HEAD 到达的提交(以末尾的 .. 表示)。因此,它显示了与 trunk 相比,此分支独有的提交。 -p 选项以补丁形式显示这些提交的差异。

推送到 trunk#

git push upstream-rw my-new-feature:main

这将此存储库中的 my-new-feature 分支推送到 upstream-rw 存储库中的 main 分支。