Как продолжить git-слияние, когда кто-то нажал, отметив все файлы как «разрешенные»? - PullRequest
0 голосов
/ 08 января 2019

Мой друг

  • пробег git merge master
  • разрешены некоторые конфликты
  • помечает все файлы как "разрешенные"
  • выдвинул коммит слияния во временную ветвь

Я вытащил ветку. Я могу видеть различия в файлах, таких как

<<<<<<< HEAD
text1
=======
text2
>>>>>>> origin/master

Как я могу смоделировать слияние, где остановился мой друг?

Я согласен с решениями, которые включают в себя некоторые извлечения / извлечения в других местах, некоторые команды копирования / вставки, другие команды / инструменты для обнаружения различий и т. Д.

Ответы [ 3 ]

0 голосов
/ 09 января 2019

В этом случае вы можете git grep '<<<<<<<' через код найти те места, которые еще нужно объединить. Если вы исправили код, вы можете либо зафиксировать его самостоятельно, чтобы указать, какое разрешение было выполнено тем или иным автором, либо вы можете внести изменения в существующий коммит, чтобы каждый коммит создавался и корректировался. Тем не менее, в этом случае информация об коммитах автора менее информативна.

Вы должны рассмотреть и свой инструмент организации git. На github коммиты на ветки часто запрещены. Поэтому принудительное принудительное обновление обновленного коммита часто невозможно. В этом случае вы должны создать свой собственный коммит. На Gerrit внесение изменений в коммиты является частью дизайна, в котором обновлены открытые изменения.

0 голосов
/ 12 января 2019

Я объединил это https://stackoverflow.com/a/54099010/2900777 и это https://stackoverflow.com/a/54104467/2900777.

  • Извлечь ветку в каталог (BRANCH_DIR)

  • Имитировать то же слияние в другом каталоге (MERGE_DIR)

  • В BRANCH_DIR выполните команду ниже и отсортируйте файлы, которые необходимо проверить

    git grep '<<<<<<<' | cut -d ':' -f1 | sort -u </p>

  • В MERGE_DIR для каждого файла на предыдущем шаге выполните

    git mergetool FILENAME

  • После разрешения конфликтов в файле в MERGE_DIR скопируйте / вставьте содержимое в файл в BRANCH_DIR

  • Создать новый коммит или изменить предыдущий (зависит от вашего варианта использования)

0 голосов
/ 08 января 2019

Я бы не пытался оправиться от работы вашего друга, а скорее повторить слияние с нуля.

Найдите объединенный коммит вашего друга и используйте git log --graph или git log --format=fuller, чтобы определить его родительские коммиты:

Например, у меня есть 39184c481a, который является объединением 2aa69455a3 в 1d3c2f45f6.

git log --format=fuller 39184c481a

commit 39184c481a
Merge: 1d3c2f45f6 2aa69455a3
Author: ...

Затем извлеките первоначального первого родителя и объедините в него другого родителя

git checkout 1d3c2f45f6
git merge 2aa69455a3

и теперь я нахожусь в том же состоянии, в котором находился, когда был сделан коммит. Отсюда вы сможете повторить разрешение конфликта.

Возможно, вы захотите дать себе ветку, чтобы позже найти эту работу:

git checkout -b dev.fixing-the-merge

И в конечном итоге объединить это обратно с вашей основной веткой, или, возможно, переписать историю с git push --force, если ваша команда готова позволить вам сделать это.

...