【问题标题】:Rebasing after a Pull request拉取请求后变基
【发布时间】:2017-02-21 16:53:12
【问题描述】:

我有一个功能分支test。我进行了更改并将更改提交到该分支。与此同时,我的master 提示已更改(假设它有更多来自其他开发人员的提交)。

在将我的更改推送到我的远程分支之前,我做了一个git rebase,然后推送我的更改并创建了一个拉取请求。

对于我的拉取请求,我需要修复一些 cmets。

修复后,我看到我的master 分支更新了。 (假设来自其他开发人员的更多提交)。

在任何时候,将master 合并到test 分支的原因是:可能存在需要集成master 中的更改并使用此功能分支测试应用程序的情况

在这种情况下,我有 2 个问题。

  1. 如何在我的test 分支中没有合并提交的情况下将master 的新更改合并/重新定位到我的test 分支上?这样,我将同时拥有作为 Pull Request 一部分的我之前的提交和作为 Pull Request 评论修复的新提交。

  2. 我如何将master 合并/变基到test 并将新提交添加到我现有的先前提交中,以便我的 PR 中始终只有一个提交?

【问题讨论】:

  • 您是否出于任何特定原因使用 rebase 而不是合并?为什么结帐到test 并运行git merge master
  • Rebase 以避免 nee 合并提交
  • 好的,如果这是唯一的原因,您应该考虑使用merge --ff
  • 你的第二个问题对我来说有点不清楚。如果这不仅仅是您第一个问题的改写,那么请注意,在 Stack Overflow 上提问时,您应该limit yourself to one question per post
  • @ScottWeldon :我的第二个问题是,在 PR 之后,如果我修复了那些 PR cmets,而不是提交新的提交,我想用 test 重新设置分支 master 然后附加对我之前提交的新提交。这种方式 PR 将有一个单一的提交

标签: git github git-rebase git-pull pull-request


【解决方案1】:

首先,确定您是否真的需要将来自master 的新更改集成到您的功能分支中。可能您可以忽略来自master 的新更改。如果它们与您在test 中的更改不冲突,那么这是最简单的做法,维护者无论如何都可以合并您的 PR。

您可以通过查看 GitHub PR 页面轻松查看是否是这种情况。如果您收到“无法自动合并”消息,则必须使用以下解决方案之一。


包含上游更改而不合并的标准方法是再次变基:

git checkout test
git rebase master

由于这会重写历史,您需要强制推送:

git push --force-with-lease

您的 PR 将使用您的所有提交进行更新,并且现在将在其历史记录中包含 master 上的新提交。

强制警告:由于 rebase 会重写历史,这对于在此分支上工作的其他人来说可能是危险/破坏性的。确保与您合作的任何人清楚地传达您所做的事情。

如果你不想变基,你的其他选择是:

  • master 合并到test,但您已声明不想这样做。
  • git cherry-pick master 上的任何新提交。这有在您的分支上复制这些提交的缺点。
  • master 合并为testgit merge --squash master。这与cherry-pick 的效果相似,但只创建一个提交。

【讨论】:

  • rebase 或 merge 的原因不是因为 git 说 PR can be merged 可能存在需要集成 master 中的更改并使用此功能分支测试应用程序的场景
  • @Rams 啊,好的。这是一个正当的理由。您可能应该edit您的问题来提及这一点。
猜你喜欢
  • 2020-08-24
  • 2014-11-30
  • 1970-01-01
  • 2016-03-31
  • 2017-03-17
  • 2014-04-30
  • 2016-12-03
  • 2017-01-30
  • 2012-12-11
相关资源
最近更新 更多