GitHub 可以像 Gerrit 那样变基而不是合并吗?

Can GitHub rebase instead of merge, like Gerrit?

我做了一些 Gerrit 代码审查,发现一旦我们在 Gerrit 页面上单击 "Submit",它不会执行合并,而是执行 "rebase"(更准确地说,一些精选),这样历史是线性的,我所有的小提交历史都会进入那个线性历史,并且没有 "merge" 提交。

然后我在 GitHub 上尝试了类似的操作:只需 fork 一个 repo 然后在 web 上编辑并创建一个 pull request,并让原始 repo 通过合并接受那个 pull request。

然后我在 SourceTree 中看到它是 "merge",而不是 "rebase",所以历史不是线性的...但如果我这样做,我仍然会看到所有提交历史 git log,可能只是按时间顺序排列。

但问题是,GitHub 可以像 Gerrit 一样做一个 rebase 吗?这真的不难做到:当用户可以在 GitHub 上单击 "Merge" 时,只需检查 rebase 是否一切正常,只需将 "Merge" 按钮更改为 "Merge by rebase" 或 "Accept the changes (as a rebase)" 它会像 Gerrit 一样工作,而变基是许多回购所有者喜欢的方式。那么 GitHub 可以像 Gerrit 一样做一个 rebase 吗?

GitHub 提供绿色 "merge" 按钮,一侧有下拉箭头。单击下拉箭头可以更改操作:

  • 合并:相当于正常 git merge
  • 变基和合并:做一个变基,就像git rebase --force,然后快进所产生的复制提交
  • 压缩和合并:相当于 运行 git merge --squash,或多或少

这三个选项中的中间一个与 Gerrit 会做的类似,但我不清楚 Gerrit 是否具有(错误?)首先有效地执行 git rebase --force 的功能。

强制变基意味着你——点击合并按钮的人——成为新提交的 提交者,并且所有提交都有新的、不同的哈希 ID,即使原件 可以 按原样使用,即使您是原始提交的提交者。 (如果你不是最初的提交者,那将是一个像这样强制 rebase 的好借口。)