【问题标题】:Squash commits of a closed pull request关闭拉取请求的壁球提交
【发布时间】:2018-04-24 17:19:06
【问题描述】:

我有一个合并和关闭的拉取请求。之后我删除了那个分支。该分支的所有提交现在都显示在合并分支的历史记录中。现在有一个选项可以在 Git 中恢复分支,但我真正想要的是压缩该 PR 的一些提交,以便它不会显示在合并它的分支的提交历史记录中。假设最初 PR 有 5 次提交并成功合并和关闭。 有没有办法从合并和关闭的 PR 中压缩一些提交?

【问题讨论】:

  • 我的问题是我不能直接在合并的分支上更改提交历史记录,因为这是一个受保护的分支。有什么方法可以从关闭的拉取请求或恢复的分支中重写历史记录?
  • 不,如果提交是某个分支的历史记录,那么它是如何到达那里的就不再重要了。它是不可能删除它。

标签: git github git-commit pull-request


【解决方案1】:

您可以使用git rebase -i <hash of first commit before merge>,然后您可以选择压缩相关的提交。请注意,这是在重写实际的提交历史记录,因此如果您与其他人共享存储库,那么在执行此操作后您将有不同的提交,这是潜在的危险领域。

【讨论】:

    【解决方案2】:

    唯一的方法是更改​​ master 分支中的历史记录(假设您的 feature/branch 已合并到 master):

    $ git checkout master
    $ git reset --hard <commit-before-merge>
    $ git push -f origin master
    

    现在你可以改写你的历史了:

    $ git checkout feature/branch
    # Hypothesis: 5 commits to squash together
    $ git rebase -i HEAD~5  
    # Rewrite your history: reword, squash, etc...
    

    此时,也许你应该在 master 上 rebase feature/branch

    $ git rebase master
    

    一旦你对你的分支历史感到满意,你就可以推送到上游:

    $ git push -f origin feature/branch
    

    然后在github上新建一个pull request并合并

    重要提示

    每个跟踪分支 master 的人都必须发出 git pull --rebase 以重新与上游同步他们的历史记录,这已被重写:

    $ git checkout master
    $ git pull --rebase origin master
    

    这将防止任何冲突和/或合并提交认为上游历史是理所当然的(接受theirs),发出快进。

    仍然依赖于master 的分支也是如此,需要相应地重新设置:

    $ git checkout feature/branch-still-depending-from-master
    $ git rebase master
    

    希望这会有所帮助;)

    【讨论】:

      猜你喜欢
      • 2016-06-27
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 2011-05-05
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多