Как объединить две ветви в Git, но сохранить все различия в обеих и разрешить конфликты вручную - PullRequest
1 голос
/ 17 июня 2019

Итак, мои ветки git настроены следующим образом:

      -------- A
    /           \
master -------- master
    \
      --------------------B

Как и в случае, я разветвлял A и B от master одновременно, и с тех пор слил A обратно в master и удалил ветку A.В ветви A я удалил некоторый код, который все еще существует в ветви B. Например, на главном филиале у меня есть (только пример):

class Eg {
  int a;
}

В ветви B у меня есть:

class Eg {
  unsigned int b;
}

, то есть то, что существовало на мастере до того, как я разветвил A и B.

С тех пор я понял, что мне нужно и то и другое, т.е. мне нужно:

class Eg {
  int a;
  unsigned int b;
}

Когда я пытаюсь объединитьмастер в B, я в конечном итоге теряю unsigned int B (потому что ветвь B позади мастера для изменений в этом разделе).Есть ли способ сохранить изменения от обоих и вручную разрешить все?Т.е. после слияния в конечном итоге наберите:

class Eg {
<<<
  int a;
===
  unsigned int b;
>>>
}

в ветви B и разрешите все это вручную?Мне нужны все изменения из ветви A / master, а также некоторые изменения из старой версии master, которые я переписал в ветви A, которые все еще существуют в ветви B (и мне нужны все мои изменения в ветви B, поскольку я получил ответвление отмастер).Я понимаю, что это довольно беспорядок, поэтому я не возражаю против ручного разрешения всего (изменения на А достаточно малы, чтобы разрешать конфликты вручную).

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Я предполагаю, что при слиянии исчезает более одной мелочи, поэтому простое слияние и исправление проблемы, вероятно, не лучший подход. При этом другой подход может заключаться в клонировании второй копии репозитория, так что у вас есть файлы как из B, так и из master, а затем использовать инструмент, такой как Beyond Compare, чтобы объединить две ветви вручную и сохранить эти изменения. На копии, которую вы не изменили (при условии, что это будет копия с извлеченной веткой B), выполните слияние, и затем вы сможете сравнить изменения обратно с веткой B. Не элегантное решение, но если у вас есть некоторые сложные изменения и партии файлов, это может стоить того.

0 голосов
/ 17 июня 2019

Изменения, которые вас беспокоят, исходят от A .... чтобы исправить это элегантно , прежде чем объединить их, вы можете добавить строку в master .... или вы можете вернуться (на главном сервере) ревизия, в которой эта строка была изменена на A (если в этой ревизии нет других изменений) ... или вы можете оформить заказ A (даже если ветвь не существует, она не имеет значения), добавить строку, затем снова объединитесь с мастером .... в любом случае, у мастера есть этот контент с любым приемом, который вы хотели бы использовать в своем рабочем процессе):

class Eg {
  int a;
  unsigned int b;
}

Затем, когда вы объедините B, вы получите то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...