【问题标题】:Is it possible to squash Git commits after a PR has been submitted and changes then committed?提交 PR 并提交更改后是否可以压缩 Git 提交?
【发布时间】:2016-02-08 06:56:35
【问题描述】:

我们正在学习 Git,我们正在使用 GitHub 作为我们的托管站点。

我们都 fork upstream repo 并将我们的提交 PR 到 upstream 以获取我们的更改。

我们正在尝试学习如何压缩我们的提交以保持上游提交历史的整洁(ish)。

我们经常承诺 :)

所以...如果我们提交一个 Pull Request .. 然后项目维护人员在提交时添加 cmets(即对 PR 进行代码审查)...然后开发人员将解决问题并再次推送他们的提交。

是否可以压缩这些提交以使 PR 只有一个提交? GH 中的 cmets 会发生什么(针对此 PR)?

【问题讨论】:

    标签: git github pull-request git-fork git-squash


    【解决方案1】:

    将提交压缩在一起:

    git rebase -i upstream/master
    

    -i 将激活交互模式,您可以决定是否要使用其父项将其压缩(称为“fixup”),或者是否要编辑提交消息(称为“ reword”),或者如果您想在提交中添加/删除/更新文件(称为“编辑”)。

    在你完成变基后,你将不得不强制推送:

    git push -f
    

    但是,我认为这会破坏审稿人对 PR 的评价。

    【讨论】:

    • 我不担心审稿人的 cmets 是否被破坏……所以没关系。谁执行这些命令?提交 PR/额外提交的人?还是审稿人?
    • 任何对 fork 有推送权限的人。
    【解决方案2】:

    您必须git push --force(在rebase squash local 之后:选择第一个提交,在其他提交上放置一个“s”标记)。

    但是 PR 仍然有效。它的关联历史将更新为刚刚推送的历史(这里是一个压缩的提交)

    谁执行这些命令?提交 PR/额外提交的人?还是审稿人?

    fork 的所有者根据需要多次推送:cmets 不会被销毁,实际上将成为压缩提交的一部分。
    之前属于 PR 的提交将被标记为“过时”,由您刚刚推送的新提交替换。
    然后维护者将能够合并压缩的历史记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-28
      • 2021-04-25
      • 2016-05-22
      • 2012-11-20
      • 2013-01-08
      • 2012-12-18
      • 2021-08-01
      • 1970-01-01
      相关资源
      最近更新 更多