如何在代码中恢复某些更改?

时间:2017-05-09 15:20:58

标签: git version-control

想象一下,我在一个分支上有以下提交: A-B-C-D-...-W

在提交B上,我提交了一些更改,使我的应用程序使用红色字体。我们意识到公众还没准备好使用红色字体,所以我们决定在提交C上恢复黑色字体,但知道最终我们会改为红色字体。几个提交后来我们现在在提交W,我们已准备好建立新的红色字体。有没有一种方法可以(或应该)更好地设置我的分支,以便我可以简单地合并更改以获取更改为红色?

我遇到了很多,发现自己只是在A和B之间进行差异,然后手动将这些更改放入我的工作副本并进行新的提交X.

也许如果我有更好的计划,我应该没有从B继续我的分支,而是从A创建一个新的分支?然后我会有这种情况:

A----B \ ---B2-C2-D2-...-W2

如果我在这种情况下,我现在可以将提交B(新的红色字体)中的更改合并到W2中。我确信这对许多人来说是显而易见的,但我很感激有人在这里叮叮当当。我的问题是我经常在事后想到这些事情。此外,除了这一个红色字体更改之外,我的提交通常还可能包含其他更改。

如果我仍然处于提交B的位置,我是否应该重新分配到多个提交中,这个红色字体是最终提交?然后在添加红色字体之前从点(提交A)分支我的开发路径?

鉴于我现在所处的位置,除了手动差异之外还有什么可以尝试来决定要做出哪些更改?

2 个答案:

答案 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进行更改(提交B1Bn):

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