Почему Git не показывает конфликты слияния, когда удаленный файл в ветке объединяется с master, у которого есть этот файл

#git #github #merge

#git #github #слияние

Вопрос:

В Master Git есть Core-src.A и Feature1-src.B. Затем создается новая ветка, и в этой ветке удаляется папка Core-src, а также создается новый файл Feature1-src.New.

. Теперь, когда мы объединяем ветку с master, Master, у которого ранее была папка Core-src, удаляется.

Я ожидал, что конфликт слияния будет вызван в графическом интерфейсе Windows Git GUI.

// Edit-дополнительный вопрос, есть ли какой-либо способ защитить определенную папку Core-src от любых изменений из веток.

Ответ №1:

Нет причин, по которым мог бы возникнуть конфликт: когда вы объединяетесь master , вы вносите изменение «удалить src «, поэтому оно просто применяется.

Вероятно, произошел бы конфликт, если бы вы создали файл в этом src каталоге в master ветке перед слиянием. Потому что слияние должно было бы обработать конфликтующие изменения:

  • Удалить src
  • добавьте файл в src

Комментарии:

1. какой еще изящный метод предотвратить удаление src папки в branch. есть ли какой-либо способ перед созданием ветки, который я мог бы сообщить ему игнорировать src .

2. абсурдно, что это работает таким образом, что ветке не всегда могут понадобиться все файлы в качестве своего master, и только потому, что master нуждается в своих imp ortant файлах, он должен продолжать изменять эти файлы, чтобы предотвратить их удаление branch.

3. Кто удалил src ? и кто объединил? Вы или другой участник? Если это вы, то вы мало что можете сделать, чтобы предотвратить самостоятельное удаление материала. Если это не вы, просто удалите разрешение для других пользователей!

Ответ №2:

Если src был удален в branchA , то при объединении этой ветки с master могут возникнуть конфликты, если master что-то изменилось src , например, любым из следующих способов:

  • изменен файл в src
  • добавлен файл в src
  • изменено разрешение файла в src
  • переименовано src

И, возможно, другие тоже. Если в master on src не произошло никаких изменений, которые могли бы привести к src удалению, то слияние пройдет нормально.

По умолчанию Git фиксирует слияние. Если вы хотите избежать этого (чтобы сначала просмотреть изменения), вы можете использовать эту команду:

 git merge --no-commit --no-ff branchA
  

Это выполнит слияние, но не зафиксирует. На этом этапе, если вы заметили, что src был удален, вы могли бы вернуть его обратно перед фиксацией с помощью команды:

 git checkout HEAD -- src
  

Наконец, странно, что кто-то создал файл в target , который обычно используется для продуктов сборки и не должен находиться под контролем версий. Обычно это происходит по ошибке, когда target его нет в .gitignore списке.

Комментарии:

1. не обращайте внимания на названия, используемые для иллюстрации ситуации.

2. Это обеспечивает некоторое разрешение для возврата файла обратно. Есть ли какой-либо способ защитить определенные файлы от модификации или удаления при слиянии из веток. Скажите a core-src , и я не хочу никаких изменений путем слияния из ветки, которая выполнила основную работу над ‘Feature1-src’, независимо от того, какие изменения они могли бы внести в core-src в ветке.

3. Для этого я знаю этот метод: git-scm.com/book/en /… — Я никогда не использовал и не тестировал это, хотя. Удачи!