Принудительный Git, чтобы вызвать конфликт слияния - PullRequest
0 голосов
/ 28 мая 2018

У меня есть несколько файлов, которые я хотел бы «сделать недействительными» в моем dev_branch, давайте назовем его ветвью «A», поэтому, после слияния с другим dev_branch давайте назовем его ветвью «B», я получаю конфликт слияния.Те несколько файлов, о которых я упоминал, были ранее отредактированы в другом dev_branch с именем B.

Вот что я попробовал до сих пор:

Я удалил файлы из индексного кэша моей ветви "A" иснова добавил их.

git checkout -b feature/A origin/feature/A
git -rm -r --cached "myFolder"
git commit -am "removed the files"
cd "myFolder"
git add .
git commit -am "added back the files"

До сих пор ветвь A находится в двух коммитах от master, а ветвь B - только один с отредактированными файлами, и теперь я попытался слить, но все еще не получил конфликт слияния

git merge origin/feature/B

почему я не могу вызвать конфликт слияния?оба имеют коммиты, не входящие в главную ветку. Как вызвать конфликт слияния без индивидуального изменения содержимого каждого файла?

1 Ответ

0 голосов
/ 28 мая 2018

Чтобы получить конфликт в любом конкретном файле, вам нужно, чтобы Git:

  1. вычислил базовый коммит слияния, как это происходит для большинства слияний;
  2. findчто этот коммит является прародителем обоих коммитов с ветвлением;
  3. обнаруживает, что один конкретный файл в база слияния отличается от того же файла в обоих коммитах;
  4. и, наконец, обнаружите, что объединение этих изменений приводит к конфликту.

Подробнее о первых трех см. Любой из многих предыдущих вопросов.У меня есть подробный ответ здесь , в котором подробно рассматриваются стратегии слияния, а также обсуждается нормальный процесс поиска базы слияния с учетом типа слияния по умолчанию.Для получения дополнительной информации о пункте 4 см. , когда именно возникает конфликт слиянием git .

(Содержимое вашей области индекса / промежуточной области на момент запуска git merge не имеет значенияк этому конкретному процессу, за исключением того, что git merge обычно требует, чтобы индекс был «чистым», т. е. соответствовал текущему коммиту, для запуска.)

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

  • отсутствует: это конфликт "добавить / добавить"
  • имеет другое имя, чем в одном изкоммиты с двумя советами, и отсутствующие в коммите с другим советом: это конфликт «переименование / удаление»
  • имеет различное содержимое в базе и один совет, и удаляется в другом совете: это «изменение»Конфликт / delete "
  • имеет три разных имени в трех коммитах: это конфликт" переименование / переименование "

(я думаю, что он охватывает все возможные случаи).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...