git merge не сливается - PullRequest
       3

git merge не сливается

14 голосов
/ 13 октября 2011

У меня есть мастер и ветвь "PersonalSite" для кодовой базы, над которой я работаю. Я неоднократно пытался слить мастер в ветку PersonalSite безрезультатно.

На этот раз я подумал, что все уладил, поэтому я сделал:

git checkout master
git pull
git checkout PersonalSite
git pull
git merge master

Выглядело, как будто все работало, и в нем был указан набор файлов, который я ожидал, но возник конфликт. Конфликт был корректным и был, как и ожидалось, поэтому я исправил его, сделал «git add», «git commit», затем «git push». Но теперь, когда я смотрю на свой git log, он просто показывает коммит без изменений кода, а с одним конфликтом

Теперь, когда я запускаю «git merge master» из ветки «PersonalSite», он говорит: «Уже актуально». но это явно не тот случай, так как ни одно из изменений, которые я пытался объединить, фактически не слилось. Что именно я делаю, чтобы мастер действительно слился в этот момент?

Ответы [ 4 ]

9 голосов
/ 13 октября 2011

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

EDIT: Хорошо, попробуйте этот тест. Вам не нужно использовать команду слияния, вы можете просто перетащить мастер в PersonalSite.

git checkout PersonalSite
git pull origin master

Посмотри, что тебе дает. Если он говорит, что в курсе, то вы слились правильно.

Если вы объединяете вещи локально, как вы это сделали, то вам необходимо убедиться, что локальные ветви отслеживания обновлены. Всегда указывайте название ветки, из которой нужно извлечь,

git pull origin master
git pull origin PersonalSite
5 голосов
/ 05 июля 2017

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

git checkout <desired_branch_name> -- .

Так что для вас:

git checkout master -- .

Я нашел ответ здесь: git: извлечение файлов из другой ветви в текущую (не переключайте HEAD в другую ветку)

3 голосов
/ 13 октября 2011

Предполагая, что вы фактически слили то, что вы хотели объединить (что возможно, но трудно сказать, учитывая ваше объяснение), вы все равно не увидите diff в выводе git log, только сообщения фиксации.Даже если вы используете -p для указания git log для отображения различий, различие для коммита слияния обычно будет пустым или, возможно, покажет разрешение конфликтов.Это потому, что семантически только разрешения конфликтов являются частью фиксации слияния;другие изменения являются частью других коммитов.

Если вы хотите, чтобы git log в любом случае показывал вам полный эффект коммитов слияния, вы можете использовать:

git log -p -m -c

Функция опций:

  • -p направляет его для показа различий, а не только для сообщений о коммитах;
  • -m говорит, что он также показывает различий для коммитов слияния;и
  • -c говорит ему объединить два diff в один для коммитов слияния

Представление diff в gitk сделает то же самое.

0 голосов
/ 13 октября 2011

слияние не будет отображать никаких изменений, кроме разрешения конфликтов.

Чтобы увидеть различия по обе стороны слияния, выполните:

git diff head^..

и

git diff head^2..

для другой стороны.

Надеюсь, это поможет.

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