В каких обстоятельствах команда 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 делает что-то особенное, что может повлиять на эту проблему.
Я тоже столкнулся с этим вопросом вчера, вытаскивая код из ведущей ветки Github '' в мою ветку 'heroku' на локальном компьютере, но он сказал, что ваша ветка обновлена, а затем выполнила шаги, о которых вы говорили выше. Я думал, что это, должно быть, ошибка. – sahil
Проверьте, что ваше отслеживание - это то, что вы думаете. 'git branch -avv' покажет вам, какие удаленные ветви отслеживаются для каждой локальной ветви. Вы можете обнаружить, что каким-то образом «мастер» отслеживает нечто иное, чем «origin/master». –