после удаления конфликтующих файлов слияние не распознает файлы в исходной ветке для слияния

#git #merge #merge-conflict-resolution

#git #слияние #слияние-разрешение конфликтов

Вопрос:

Я пытаюсь объединить master с моей веткой, но есть некоторые конфликты. Я удаляю конфликтующие файлы в своей ветке и пытаюсь объединить снова, но он говорит «Уже обновлен».

Файлы, которые я хочу объединить в главной ветке, все еще там. Те файлы, которые я хочу объединить с моей веткой, не отображаются, но фиксация и слияние продолжают говорить «Уже обновлены».

Пожалуйста, помогите и объясните ситуацию, поскольку я новичок в git.

Ответ №1:

Удаление этих файлов в вашей ветке, вероятно, было ошибкой. У вас был конфликт содержимого (я изменил строку 123 с «foo» на «bar», а они изменили строку 123 с «foo» на «omg») на конфликт существования (они меняют строку 123 с «foo» на «omg», и я говорю: удалите весь файл).

Однако странно, что вы получаете «Уже обновлено». при слиянии сейчас. Кажется, вы не все сказали о том, что вы там сделали. Вы получите «Уже обновлено». только когда считается, что основная ветка уже полностью объединена с вашей веткой.Судя по тому, что вы говорите, вы, должно быть, удалили файлы, а затем зафиксировали это изменение (удаление файла) в качестве разрешения конфликта. Если вы это сделали, то история выглядит так:

перед:

               changeA - changeB - changeC[yourwork] --- (merge conflict)
            /                                          /
some common                                          / 
   state                                          /
              changeX - changeY - changeZ[master]
 

после:

               changeA - changeB - changeC ---- (merge deletefiles)[yourwork]
            /                                        /
some common                                         /
   state                                          /
              changeX - changeY - changeZ[master]
 

В этом состоянии попытка объединить мастер ничего не дает, потому что он уже был объединен, следовательно, сообщение «Уже обновлено». Кроме того, в yourwork ветке файлы отсутствуют, поскольку вы их удалили. И на главном они все еще присутствуют, поскольку master нет фиксации, которая удаляет эти файлы.

Забавный факт: если вы сейчас объедините свою ветку с master, файлы также исчезнут из master.

Вероятно, лучшим способом решить эту проблему было бы отменить фиксацию слияния (т. Е. reset Вашу ветку changeC и повторить слияние; или revert merge deletefiles фиксацию и повторить слияние).

В любом случае, когда вы повторите слияние, вы снова получите тот же конфликт, что и раньше. На этот раз вы должны resolve разрешить конфликты: сообщите git, какую версию файлов вы хотите сохранить (вместо того, чтобы сообщать git, что вам вообще не нужны эти файлы).