拉取请求后重新定位

时间:2016-10-12 18:49:07

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

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

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

对于我的拉取请求,我需要修改一些注释。

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

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

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

  1. 如何在master分支中没有合并提交的情况下,将test的新更改合并/重新绑定到我的test分支上?通过这种方式,我将拥有以前的提交,这些提交是Pull Request的一部分,而新提交是Pull Request注释修复。

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

1 个答案:

答案 0 :(得分:4)

首先,确定您是否确实需要将master中的新更改集成到功能分支中。您可以忽略master的新更改。如果它们与test中的更改不冲突,那么这是最容易做到的事情,维护者无论如何都能合并你的公关。

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

在不合并的情况下包含上游变更的标准方法是再次进行再次变换:

git checkout test
git rebase master

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

git push --force-with-lease

您的公关将会更新所有提交内容,现在将在其master的历史记录中包含新提交。

强制性警告:由于rebase会重写历史记录,因此对于在此分支上工作的其他人来说,这可能会造成危险/破坏。请务必清楚地告知您与正在合作的任何人所做的事情。

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

  • master合并到test,但您已声明不想这样做。
  • git cherry-pick master上的所有新提交。这有一个缺点,就是在你的分支上重复这些提交。
  • master压缩到testgit merge --squash master。这与cherry-pick类似,但只创建一个提交。