我有一个功能分支test
。我做了我的更改并将更改提交到该分支。同时我的master
提示被更改了(假设它有更多来自其他开发人员的提交)。
在将我的更改推送到远程分支之前,我执行了git rebase
,然后推送了我的更改并创建了一个Pull请求。
对于我的拉取请求,我需要修改一些注释。
修复后,我看到我的master
分支已更新。 (假设来自其他开发者的更多提交)。
在任何时候,将master
合并到test
分支的原因是:可能存在需要集成master中的更改并使用此功能分支测试应用程序的情况
在这种情况下,我有两个问题。
如何在master
分支中没有合并提交的情况下,将test
的新更改合并/重新绑定到我的test
分支上?通过这种方式,我将拥有以前的提交,这些提交是Pull Request的一部分,而新提交是Pull Request注释修复。
如何将master
合并/重新绑定到test
并将新提交添加到我现有的先前提交中,以便我在PR中始终只有一次提交?
答案 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
压缩到test
:git merge --squash master
。这与cherry-pick
类似,但只创建一个提交。