我如何干净地改变一堆彼此分叉的拉取请求?
我有3个拉链请求彼此“链接”(A
,B
,C
),所有这些请求都来自干净的主人。即在我创建了远程分支A
之后,我从A
进行了一些更改,进入了新的分支B
。我在两个分支之间的diff中发出了一个pull请求,并将其称为pull request B
。
拉取请求A
与当前主人“最接近”,因为那里的更改很可能是关闭主人的。但我需要对A
进行一些修改并更新我的拉取请求(来自代码审查)。我假设我可以使用拉请求分支A
轻松地从主服务器中退出。
当我尝试将B
重新绑定回“主人”时(从A
更改)会发生什么?我想从更新的A
开始挑选第一个樱桃?如何正确选择A
(B
没有)的更改,B
然后可以将其更改为主?
在一天结束时,我只想要更改A
(以及新的更改),B
,C
重新加入主人,以便主人的历史记录清晰。这样做的最佳方式是什么?
(随意纠正我的术语,我不认为“rebase into master”是正确的。我只是想说当我说“rebase into master”时我想重播我对master的更改)< / p>
答案 0 :(得分:1)
所以,我认为这就是你如何设置你的分支机构,但如果这是错误的话,请纠正我:
master-with-new-commits
/
/
master-old - A - B - C
你说你想把A重新绑定到master
,然后通过分支链传播,这是正确的吗?如果是,那么您只需对每个分支多次使用rebase
,在其重新定位的父级之上重新定位每个分支,如下所示:
git rebase --onto <new-base> <old-base> <branch>
git rebase --onto master-with-new-commits master-old A
git rebase --onto new-A A@{1} B
git rebase --onto new-B B@{1} C
在这种情况下,branch@{1}
语法仅仅意味着branch
在其第一个位置的状态,即在它被重新定位之前(假设干净地应用了rebase并且没有任何冲突)。如果存在冲突,您可以简单地为每个分支使用旧基础的提交sha而不是branch@{1}
语法。
完成所有变基后,您应该拥有以下内容:
master-with-new-commits - new-A - new-B - new-C
/
/
master-old - A - B - C
答案 1 :(得分:0)
显然,您需要做的就是......在A
上更改您内心的内容。从新分支A
重新绑定master并将其全部合并为master(--no-ff)。
然后从B
修改主人,并且更改是!!当重放更改失败时,git会进行非常聪明的3向合并。因此,从新的A
和master
开到分支B
或新B
,您可以非常轻松地完成所需的所有更改。
根据需要重复步骤。
如果您遇到重复提交,只需按照它git rebase --skip
告诉您:)