2015-11-06 2 views
1

Когда я хочу, чтобы получить изменения от хозяина на ветке с:Git тянуть --rebase: автоматическое слияние о конфликте файлы

git pull --rebase 

и модификация была сделана на мастер на файл я модифицированный в моем ветви, в этом файле выполняется автоматическое слияние. Результирующий файл представляет собой смешение основных изменений и модификаций ветвей.

Почему у меня нет файла с некоторыми отмеченными конфликтами областями, как я ожидал?

EDIT Описание проблемы, с которой связано столкновение, является источником моего вопроса. На ветке B у меня есть класс C, который реализует интерфейс IC. Я добавил локально метод для C. Другой человек в той же ветке нажимает некоторые изменения. Одна из этих модификаций заключалась в следующем: добавьте метод в IC и добавьте реализацию метода в C. Этот метод является методом, который я ранее добавил на моей стороне. После тяги Git автоматически объединил файлы C и 2 методов с той же сигнатурой, которые существовали в классе C. Вот почему я хотел бы запретить авто-слияние.

+1

http://stackoverflow.com/questions/5074452/git-how-to-force-merge-conflict-and-manual-merge-on-selected-file –

ответ

0

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

EDIT Если вы хотите мерзавец, чтобы заставить уведомить вас о файлах слились (т.е. принудительные конфликты), вы должны создать настраиваемый драйвер слияния, см., например, Git - how to force merge conflict and manual merge on selected file

EDIT Что касается вашего замечания: В разделе «тянуть ветви», есть два изменения мастер-WRT:

  1. удаления блока кода в строке X
  2. Добавить блок кода на линии Y.

Ожидаемое поведение: ЕСЛИ блок кода в строке X не изменяется в главном, после слияния происходят два изменения: remo ve блок кода в X и добавить блок кода в Y.

Это именно то, что делает git! Если вы объединяете такую ​​ветвь в мастер, то метод будет возникать только один раз в файле, а именно в том месте, где вы переместили его на

Если это может пойти не так: если у вас есть две ветви: A и B. В A вы перемещаете метод в строку Y1, в B, вы перемещаете тот же метод в строку Y2. Git думает: обе ветви разделяют «удаление», здесь нет конфликта. Не существует конфликтов с добавлением (поскольку Y1 и Y2 находятся далеко друг от друга) ...

Однако используемый вами пример использования (метод перемещается только в одной ветви) не создает проблем.

+0

Я не понимаю, почему нет конфликта. В моем случае 2 человека изменили один и тот же файл, так что только я могу реализовать слияние. Авто-слияние здесь не имеет смысла. – Ekans

+0

Если они изменяют разные строки в этом файле, конфликт может не возникнуть.Например, если я изменил первую строку файла на «a», и вы изменили последнюю строку этого файла на «b», автоматическое слияние возьмет исходный файл и изменит первую и последнюю строку на «a», соответственно «b» – BartBog

+0

Хорошо, я понимаю, если конфликт управляется на линейном уровне. Могу ли я иметь «менеджера конфликтов» на уровне файлов? В целом, как я могу иметь конфликт в моем случае использования? – Ekans

Смежные вопросы