#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 /… — Я никогда не использовал и не тестировал это, хотя. Удачи!