Я вытягиваю из своей ветки :

git checkout mybranchSample
git fetch
git pull origin master

Затем Git дает мне следующее сообщение:

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

enter image description here

И после ввода сообщения фиксации он объединяет master в мои файлы. И хотя я не работал с некоторыми файлами из master, он показывает список файлов зеленым, когда я набираю git status.

Эта проблема не возникает у моих коллег, а только у меня. В чем может быть причина?

44
Pratik 30 Дек 2015 в 12:11

6 ответов

Лучший ответ

git pull - это, по сути, два действия одновременно: git fetch, за которым следует git merge (если вы не используете git pull --rebase, и в этом случае вы можете догадаться, что происходит).

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

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

45
Madara's Ghost 30 Дек 2015 в 09:16

Я думаю, у вас проблема с ветками ... 2 возможных сценария, с которыми вы сталкиваетесь:

1) У вас есть удаленная ветка, mybranchSample, и вы хотите поработать над ней - в данный момент вам нечего делать с главной ветвью (то есть вы не хотите объединять свою ветку с основной или наоборот). Вы говорите в своем вопросе

Когда я получаю запрос от моей ветки после получения, как ...

Но что вы делаете, так это git pull origin master, который извлекается из master . Вместо этого вы должны иметь возможность с версией git & gt; = 1.6.6 проверить свою удаленную ветку, используя

git fetch
git checkout mybranchSample

2) Вы пытаетесь работать над mybranchSample, но хотите, чтобы там был последний код из основной ветки. Тогда имеет смысл, что может потребоваться слияние, как сказал Ананд С.

3
misch 8 Янв 2016 в 11:35

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

Причина того, что файлы в diff, которые вы не изменили, заключается в том, что после слияния новая фиксация должна быть родительской: последняя фиксация, которую вы сделали, и самая новая фиксация на главной. Новый коммит содержит все изменения / файлы . Таким образом, если вы измените новый на свою последнюю фиксацию , вы увидите все файлы как измененные / добавленные, которые были изменены / добавлены на главном сервере, пока ваша ветка не была синхронизирована с главная ветка.

3
Martin Rauscher 7 Янв 2016 в 21:37

Если вы пытались объединить master в ветку mybranchSample, то это совершенно нормально.

Git объединяет master с mybranchSample (когда вы делали git pull origin master из ветки mybranchSample) и commits вносит изменения за вас (если нет конфликта) и дает вы предварительно заполненное сообщение. Вы можете просто сохранить и выйти.

НО Если вы просто пытались получить последний код из удаленной ветки master для слияния с локальной веткой master, то вам следует оформить заказ на master и затем потяните из master.

Из вашего заявления

он объединяет мастер-файлы с моими файлами. И хотя я не работал с некоторыми файлами из мастера, он показывает список файлов зеленым, когда я набираю git status.

Я думаю, вы пытаетесь сделать второй.

Так что постарайтесь:

git checkout master
git pull origin master
3
Anand S 3 Янв 2016 в 15:38

Линус Торвальдс объясняет это лучше всего:

Распространение информации о грядущем изменении пользовательского интерфейса «git», так как во многом виноват я.

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

Я использую эту функцию git в течение последних нескольких недель, и это привело к тому, что мои слияния субмаинтейнеров имели в себе различные примечания (ну, по крайней мере, если субмаинтер дал мне их). Так что я пытаюсь подавать пример.

Но если вам не нравится объяснять свои слияния, это может раздражать. Конечно, если вы не объясняете свои слияния, вы раздражаете, так что в конце концов все уравняется. Так сказать "кармический баланс".

Источник: https://plus.google.com/+LinusTorvalds/posts/SrePhcj6XJe.

28
tne 7 Янв 2016 в 12:24

Просто чтобы попытаться дать всем простой ответ, и, пожалуйста, поправьте меня, если я не прав:

Кажется, это происходит, когда вы git pull после фиксации в ветке. Ваши локальные изменения не существуют на удаленном компьютере, поэтому он берет на себя обязательство синхронизировать все.

1
plushyObject 17 Янв 2020 в 21:57