Файлы перемещены в папки в мастере. Теперь у веток есть конфликты слияния - PullRequest
0 голосов
/ 17 июня 2020

В нашем проекте слишком много файлов. Итак, в основной ветке я переместил файлы в папки, и теперь они выглядят чистыми. Однако, когда я объединил master со всеми другими ветками (чтобы у них были последние обновления), у них возникли конфликты слияния, которые я не понимаю, что они означают и как их исправить.

В master файлы были перемещены . А в ветвях эти файлы могут иметь множество модификаций.

Как я могу объединить мастер в разные ветки, сохранив все изменения?

Вот что позволяет мне делать рабочий стол Github, но я не делаю этого. Не знаю, что означают эти параметры:

enter image description here

Ответы [ 2 ]

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

Кажется, вы думаете, что движение файла - это «вещь» в git, и что ветви, с которыми вы сливаетесь, каким-то волшебным образом «приобретут» это движение как функцию, без что-нибудь еще происходящее, или «сворачивание» этого во что бы то ни было еще произошло. Это неправда; это не то, что git. Git мыслит в терминах отдельных файлов, а отдельный файл - это единый путь .

Итак, file.txt - это файл. Если вы переместите его в папку / file.txt , это будет другой файл. Git видит, что один файл исчезает и появляется новый файл. Git будет попытаться соединить эти два файла друг с другом, если ситуация достаточно проста, но нет никаких гарантий. И даже если это так, он не рассматривает это как «ход»; он видит это как переименовать .

Итак, я представляю себе, что произошло что-то вроде этого:

on master:

     file file.txt moved to [was renamed as] myfolder/file.txt

on branch:

     file file.txt modified in place

Итак, это конфликт. Одна ветка переименовала файл, другая изменила файл. Git не знает, что вы хотите сделать, поэтому оставляет это на ваше усмотрение.

Но у вас также нет простого жизнеспособного пути вперед. Вы сделали плохую вещь. Что из этих двух вещей вы хотите переименовать или изменить? Ни то, ни другое! Вам нужно содержимое файла по адресу file.txt в branch, но вы хотите, чтобы они находились в месте , где «тот же» файл находится в master, а именно myfolder / file.txt . Ура!

Как вы собираетесь исправить этот бардак? Самый простой способ - отказаться от слияния и начать все сначала. У вас есть два основных варианта:

  • Выполните перестановку в ветке (ах). Другими словами, позвоните всем в команде и скажите: «Привет всем, в какой бы ветке вы ни работали, сделайте фиксацию, переместите file.txt в myfolder / file.txt и сделайте еще одну фиксацию ". Если все будут делать то же самое, все они успешно сольются в мастер.

  • Полностью воздержитесь от перегруппировки. Позвоните всем и скажите: «Привет всем, когда вы закончите с этой веткой, остановите работу, пока все не объединятся». Подождите, пока все не объединятся, а затем выполните перестановку. Теперь каждый может тянуть мастер, и работа может начинаться снова с новыми ветками.

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

«перемещение» файла в git равносильно удалению файла и добавлению файла. Итак, по сути, это два разных действия.

Конечно, теперь у вас куча конфликтов, как вы и ожидали.

Мое предложение: не используйте GitHub. Делайте это локально, используйте для этого время и место. То, что вы сделали, - это рефакторинг дерева папок вашего программного обеспечения, и это стоит больших затрат с точки зрения работы.

Что произошло? У нового мастера есть удаление для файла X. Файл X также изменяется в ветвях. Итак, конфликт заключается в следующем: вы хотите сохранить отредактированный файл или удалить его? Вы, вероятно, захотите оставить его, а затем снова переместить. Да. Либо напишите свой собственный сценарий сохранения и перемещения, либо попробуйте альтернативный подход: переустановить ветку поверх нового основного коммита. Git иногда бывает умным. Существует небольшая вероятность того, что таким образом он сможет автоматически отсортировать проблему. Будьте готовы потратить на это некоторую ручную работу.

...