Git已经是最新错误

时间:2018-06-28 15:51:41

标签: git version-control

我们说分支集成,其中提交已测试的代码,然后为所有新功能(不稳定)提交forTesting分支。由于第x天的某种原因,forTesting意外地合并到集成中,而没有任何人注意。之后,在集成和forTesting分支上已经发生了多次提交。

假设我们有branchFeatureX,它在意外合并之前已合并到forTesting分支。现在,当我们希望将此分支合并到集成中时,会出现“已经更新”错误。

如何解决此问题而又不丢失集成分支中的前向提交?

2 个答案:

答案 0 :(得分:1)

如果历史上发生错误的地方不太远,则可以考虑以下恢复过程:

1)从您的母版创建一个修订分支,并对其进行处理,以使其更加安全

2)git log在合并前查找所有出错的最后一次提交。复制或记录提交哈希以供进一步使用。

3)git reset --hard <commit_hash_you_spotted_as_good>

4)然后,对于自那时以来开发的每个功能,您都想回来,让我们考虑两种可能性: (此时,您可以查看日志或树的图形表示,但我建议后者)

a)分支是在错误之前从主节点创建的:

->只需将此功能合并到fix分支中,应该非常简单

b)分支是根据已经损坏的master版本创建的

-> git再次登录以记下该分支上的每个提交,并使用git cherry-pick <commit_id>

将它们重新选择到fix分支中

4)测试您的修订分支上的所有内容,以确保一切都恢复正常

5)然后回到master分支,像对fix分支一样重设它(最后一次提交很好),然后将fix分支合并到

答案 1 :(得分:1)

由于您将featureX分支合并到fortesting分支中,然后将fortesting分支合并到integration分支中,这意味着对featureX分支的更改已经引入integration分支。因此,当您将featureX分支合并到fortesting分支中时,git将显示Already up-to-date

现在的提交历史记录应如下图所示:

                    ...---A---B---C---K---...---L integration
                                     /
...---C---D---G---H---I---J---...---M---...---N  fortesting
               \         /
                E-------F  featureX

如果您想基于featureX分支的最新版本将integrationintegration分支的更改引入,则可以使用以下命令:

# On integration branch
git cherry-pick <latest commit from featureX branch>

作为以上示例中的命令git cherry-pick <commit F>

提交历史看起来就像(提交O将更改从featureX分支应用到integration分支):

                    ...---A---B---C---K---...---L---O integration
                                     /
...---C---D---G---H---I---J---...---M---...---N  fortesting
               \         /
                E-------F  featureX