【问题标题】:Can GitHub rebase instead of merge, like Gerrit?GitHub 可以像 Gerrit 那样变基而不是合并吗?
【发布时间】:2020-07-28 11:30:57
【问题描述】:

我做了一些Gerrit 代码审查,发现一旦我们在 Gerrit 页面上单击“提交”,它就不会进行合并,而是进行“变基”(更准确地说,一些樱桃挑选) ,因此历史是线性的,我所有的小提交历史都会进入该线性历史,并且没有“合并”提交。

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

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

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

【问题讨论】:

标签: git github gerrit rebase


【解决方案1】:

GitHub 提供了一个绿色的“合并”按钮,一侧有一个下拉箭头。单击下拉箭头可以更改操作:

  • 合并:相当于普通的git merge
  • 变基和合并:执行变基,就像 git rebase --force 一样,然后快进生成的复制提交
  • 压缩和合并:或多或少相当于运行git merge --squash

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

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

【讨论】:

    猜你喜欢
    • 2017-07-14
    • 2015-08-03
    • 2021-09-09
    • 1970-01-01
    • 2014-07-12
    • 2016-05-28
    • 2012-08-01
    • 2012-06-15
    • 2017-09-13
    相关资源
    最近更新 更多