想象一下,我在一个分支上有以下提交:
A-B-C-D-...-W
在提交B上,我提交了一些更改,使我的应用程序使用红色字体。我们意识到公众还没准备好使用红色字体,所以我们决定在提交C上恢复黑色字体,但知道最终我们会改为红色字体。几个提交后来我们现在在提交W,我们已准备好建立新的红色字体。有没有一种方法可以(或应该)更好地设置我的分支,以便我可以简单地合并更改以获取更改为红色?
我遇到了很多,发现自己只是在A和B之间进行差异,然后手动将这些更改放入我的工作副本并进行新的提交X.
也许如果我有更好的计划,我应该没有从B继续我的分支,而是从A创建一个新的分支?然后我会有这种情况:
A----B
\
---B2-C2-D2-...-W2
如果我在这种情况下,我现在可以将提交B(新的红色字体)中的更改合并到W2中。我确信这对许多人来说是显而易见的,但我很感激有人在这里叮叮当当。我的问题是我经常在事后想到这些事情。此外,除了这一个红色字体更改之外,我的提交通常还可能包含其他更改。
如果我仍然处于提交B的位置,我是否应该重新分配到多个提交中,这个红色字体是最终提交?然后在添加红色字体之前从点(提交A)分支我的开发路径?
鉴于我现在所处的位置,除了手动差异之外还有什么可以尝试来决定要做出哪些更改?
答案 0 :(得分:1)
如果你尝试在WI之上挑选B,那么认为git会告诉你修改已经应用了(因为它是W历史的一部分,对吧?)所以我们必须要有点“傻瓜”git认为B根本没有被应用。我会结帐A,樱桃选择B(只是为了创建一个B的精确克隆,但这是一个不同的版本,应该足以欺骗git)..让我们称这个版本B',然后我会结账W我会樱桃挑B'。
git checkout A
git cherry-pick B
git checkout W
git cherry-pick HEAD@{1}
答案 1 :(得分:1)
似乎您需要在提交B
之后继续工作,但仍需要将提交从B
保留到W
。如果这是您的情况,您只需要从B
结帐新的分支(如果您想要从A
结帐,您可以使用类似的方式),然后再进行处理。准备就绪后,您可以将新创建的分支合并到当前分支。详情如下:
1.Assumw原来的结构是:
A---B---C---D---…---W yourBranch
2.从提交newBranch
创建B
,并对newBranch
进行更改(提交B1
至Bn
):
git checkout -b newBranch <commit id for A>
A---B---C---D---…---W yourBranch
\
B1---B2---…---Bn newBranch
3.在newBranch
上完成开发后,您可以将其合并到原始分支(yourBranch
)中:
git checkout yourBranch
git merge newBranch
A---B---C---D---…---W---M yourBranch
\ /
B1---B2---…----Bn newBranch