2016-02-24 6 views
5

В каких обстоятельствах команда git pull origin master приведет к другому состоянию рабочей копии, чем git checkout master ->git pull ->git checkout feat-a ->git merge master?Что может вызвать «git pull», чтобы не увидеть удаленные изменения?

Длинная история.

У меня есть ветка, давайте назовите ее feat-a. Я единственный разработчик, работающий в этой отрасли. Филиал был создан из ветки master. Обе ветви имеют отдаленное происхождение, origin/feat-a и origin/master. Ничего особенного, ваше типичное расположение репозитория git.

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

Я использую SourceTree. Итак, с ответом feat-a, я открыл контекстное меню на ветке происхождения/мастера и выбрал Pull origin/master into current branch. Я был потрясен, увидев, что Гит сообщает, что мой филиал уже обновлен. Я знал, что это неправильно, должны быть изменения на удаленной ветке master. Я повторил команду несколько раз. Всегда получалось то же самое актуальное сообщение.

Чтобы быть на 100% уверенным, я сделал это «длинный путь». Я проверил master филиал, нажал кнопку Pull. Филиал обновился с последними коммитами. Затем я проверил feat-a ветку, а затем вытащил контекстное меню на главной ветке и выбрал Merge master into current branch. Вуаля! Здесь был конфликт слияния, который я ожидал получить!

Это меня озадачило. Я предположил, что выполнение pull от origin/master в моей текущей ветке совпадает с проверкой master, вытягиванием, проверкой другой ветви, а затем слияние master в текущую ветку (за исключением того, что вытаскивание с удаленного master в другую ветвь не обновляет мою local master, но это не должно затрагивать эту проблему).

По существу, по какой-то причине pull команды из origin/master в feat-a пытался убедить меня в том, что нет никаких изменений на origin/master, и только длинный путь с коммутационными ветвей и ручной сращивания работал, как ожидалось.

Я не уверен, что SourceTree делает что-то особенное, что может повлиять на эту проблему.

+0

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

+0

Проверьте, что ваше отслеживание - это то, что вы думаете. 'git branch -avv' покажет вам, какие удаленные ветви отслеживаются для каждой локальной ветви. Вы можете обнаружить, что каким-то образом «мастер» отслеживает нечто иное, чем «origin/master». –

ответ

1

Вы говорите, что используете Sourcetree, поэтому, я думаю, вы на самом деле не набрали git pull origin master в командной строке. Я предполагаю, что это либо что-то запутанное в сообщении GUI, либо ошибка в Sourcetree.

Я бы предпочел спросить разработчиков Sourcetree.

+0

Да, это может быть так. Сегодня я испытал эту проблему после обновления SourceTree. Раньше у меня не было таких проблем, так что это действительно может быть новая ошибка в SourceTree. Я попытаюсь воспроизвести его сегодня. – JustAMartin

+0

Вы были правы. Я - и некоторые из моих коллег - стал жертвой этой ошибки: https://jira.atlassian.com/browse/SRCTREEWIN-4329 Я предполагаю, что это слишком дорого стоит для доверяющих инструментов графического интерфейса. – JustAMartin