我们说我有一个非常简单的分支情况,那里有 dev 分支和生产分支,在某些时候在过去有一个共同的祖先叫做 common :
现在,是时候制作新功能了。我们想要今天 dev 中的功能,以及一个月内 production 中的功能。简单的做法是将功能从 common 中分离出来,然后在我们想要的时候将它合并到 dev 和 production 中: / p>
但这一次,我不想这样做。我不想这样做,因为 dev 和生产自 common 以来都发生了很大变化,它已经发生了变化从 common 开发此功能真的很痛苦。
我真正喜欢做的是,在树的某个后期点开发它,就像这样,只是为了我自己的幸福,所以对 dev 的所有新更新当我制作这个特征时可以出现:
现在,当然这可以将功能合并到 dev 中,但是当我将此功能合并到 production 时,它会带来一个来自 dev 的一大堆我真的不想要的东西。
一种解决方案是合并 dev 和 production 。但我真的不想这样做。我需要 dev 上的东西,而不是生产,可能很长一段时间。
当然,只要该功能不会弄乱 dev 或 production 中可能发生冲突的任何内容,我想要的内容甚至只能在逻辑上成为可能。但它确实没有。它正在走向'与这两者兼容,以及我对 dev 所做的更改,因为 common 甚至与该功能无关。当我正在制作这个功能时,我只想要他们。我不想每次想要测试任何东西时都要将该功能合并到 dev 。
答案 0 :(得分:2)
它将与两者兼容,我对
无关dev
所做的更改因为常见而与feature
这意味着您可以从dev
开始,然后,当您要在feature
中合并prod
时,您 rebase feature
在prod
之上。
这样,您只会在prod
之上添加功能提交,这可以合并feature
(快进合并)
答案 1 :(得分:1)
假设您的feature
分支从dev
分支的某个点引入了2个提交:
F1---F2 [feature]
/
D1---D2---D3---D4 [dev]
/
...---COMMON
\
P1---P2---P3---P4 [production]
如果您打算
dev
分支production
分支dev
分支合并到production
分支完成此操作的方法不止一种,具体取决于您希望历史记录显示的内容。假设您希望最小化非快进合并的数量,请从:
开始git rebase dev feature
git checkout dev
git merge feature
你会有
D1---D2---D3---D4---F1'---F2' [feature, dev]
/
...---COMMON
\
P1---P2---P3---P4 [production]
然后,如果您想要production
分支中的功能,但您还不想合并dev
分支,请执行以下操作:
git rebase --onto production <Commit ID of D4> feature
git checkout production
git merge feature
获得:
D1---D2---D3---D4---F1'---F2' [dev]
/
...---COMMON
\
P1---P2---P3---P4---F1''---F2'' [feature, production]
最后,您可以将dev
分支与:
git rebase production dev
git checkout production
git merge dev
你将拥有:
...---COMMON---P1---P2---P3---P4---F1''---F2''---D1'---D2'---D3'---D4'
| |
[feature] [production, dev]
但是,如果你有冲突,你需要相应地合并它们。请参阅The Perils of Rebasing以避免两次具有相同作者,日期和消息的提交。