Объединить две ветви после неудачного частичного слияния - PullRequest
0 голосов
/ 31 августа 2018

Я только что сделал плохо с моим git-репо, и я не знаю, как это решить. В основном у меня есть две ветви, скажем, develop и feature, которые я постоянно обновляю. В один прекрасный момент я изменил пару файлов на ветке develop. Мне также потребовались эти изменения в ветке feature, поэтому вместо того, чтобы делать это снова, я сделал слияние между двумя ветвями, применяя только эти изменения (и отбрасывая все другие изменения / конфликты файлов). После этого я только что сделал некоторые коммиты только в ветку feature.

Это сработало, как я хотел, но с большой проблемой. Теперь мне нужно полностью объединить две ветви (develop в feature), но когда я пытаюсь это сделать, ничего не происходит. Я на самом деле знаю, почему ничего не происходит (git думает, что две ветви уже объединены, и единственные изменения находятся в ветви feature. Это то же самое, что я пытаюсь объединить только что созданную ветку), но мне все еще нужно завершить объединение со старыми изменениями. Чтобы лучше понять это в примере ситуации:

develop  o--c--1-- --2-- --o- 
             \              \
feature       \ --o-- --b-- -\m--o-

b: commit before wrong partial merge
1: changes applied in the m commit (after wrong merge
2: changes NOT applied in the m commit (after wrong merge
m: result of partial merge

Как объяснено в коммите m, у меня есть только изменения 1, а не изменения 2. Если я попытаюсь объединить develop с feature, то 2 изменения будут потеряны.

Я придумал пару решений, но я не уверен, что что-то из этого действительно может работать:

  1. Я могу оформить коммит b, чтобы объединить все изменения из develop. Затем я могу зафиксировать изменения и объединить их с текущей feature веткой
  2. Я мог бы создать совершенно новую ветку (скажем, temp) из коммита c. Затем я могу скопировать все содержимое ветки feature во временную ветвь, не объединяя, а просто копируя файлы. Затем я фиксирую полученные изменения и объединяю новую ветку temp с develop. Наконец, я могу скопировать полученный контент в ветку feature, чтобы он оставался выровненным.

Я думаю, что второй вариант действительно мог бы работать, но я не совсем уверен.

Чтобы закончить, во втором варианте я попытался сохранить ветку feature, чтобы сохранить репо в порядке. Но мне не нужно сохранять ветку feature, так как я бы удалил ее рано или поздно, когда функция фактически будет завершена.

Кто-нибудь знает лучший способ помочь мне с этой проблемой?

Заранее спасибо

1 Ответ

0 голосов
/ 31 августа 2018

Использование git cherry-pick.

develop  o--c--1--2---3---4--o- 
             \                \
feature       \---o-----b------\m--o-

Если первый коммит уже есть в вашей ветви функций, то:

git checkout feature
git cherry-pick {second-commit-hash}
git cherry-pick {third-commit-hash}
git cherry-pick {fourth-commit-hash}

Далее вы можете сравнить ветки , чтобы убедиться, что ваша ветвь feature отличается от вашей ветки develop только теми изменениями, которые вы действительно внесли в нее.

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