所以我的git分支设置如下:
-------- A
/ \
master -------- master
\
--------------------B
如图所示,我同时从master分支了A和B,然后将A合并回master并删除了分支A。在分支A上,我删除了仍然存在于分支B上的一些代码。例如,On我有分支主管(仅作为示例):
class Eg {
int a;
}
在B分支上,我有:
class Eg {
unsigned int b;
}
这是我分支A和B之前master上已经存在的东西。
此后,我意识到我需要两者,即我需要:
class Eg {
int a;
unsigned int b;
}
当我尝试将master合并到B中时,我最终会丢失unsigned int B
(因为分支B位于master后面以更改该部分)。有没有办法阻止两者的更改,并手动解决所有问题?即,合并后,最终显示为:
class Eg {
<<<
int a;
===
unsigned int b;
>>>
}
在分支B上,并手动解决所有这些问题?我需要分支A / master的所有更改,以及我在分支A上重写的较旧版本的master的一些更改,这些更改仍存在于分支B上(并且我需要在分支B上进行所有更改,因为我已经从主)。我意识到这很麻烦,所以我不介意手动解决所有问题(A上的更改很小,可以手动解决冲突)。
答案 0 :(得分:0)
正在破坏您的更改来自A ....,以便优雅地进行更正,在合并之前,您可以将行添加到master ....,也可以还原(在主版本上)在A上更改该行的修订(如果该修订上没有其他更改)...或者您可以签出A(即使该分支不存在,也没有关系),添加该行,然后再次合并为master。...无论如何,让master具有您可能在工作流程中使用的任何技巧的内容):
class Eg {
int a;
unsigned int b;
}
然后,当您合并B时,您将在那里得到想要的东西。
答案 1 :(得分:0)
我假设进行合并时,有不止一件小事消失了,所以简单地进行合并并更正问题可能不是最佳方法。话虽这么说,另一种方法可能是克隆存储库的第二个副本,以便您拥有B和master的文件,然后使用Beyond Compare之类的工具手动合并两个分支并保存这些更改。在您没有更改的副本上(假设它将是分支B已签出的副本)进行合并,然后您可以将更改与分支B进行比较。这不是一个很好的解决方案,但是如果您有一些复杂的更改并且有很多文件,这可能是值得的。