2013-12-12 3 views
8

Так что - кто-то может прояснить этот вопрос один:некоторое замешательство на мерзавца тянуть против мерзавца-выборки

Я бегу:

git pull origin master 
git status 

И тогда тянет изменения и говорит:

your branch is ahead of origin/master ... blahblah by 6 commits... 

Когда я затем запускаю

git fetch 
git status 

Это sa : Е.С.

# On branch master 
nothing to commit (working directory clean) 

Так что - я думал, что git pull делает выборку мерзавца по умолчанию - так почему же он говорит, что «вперед на 6 фиксаций» без дополнительной git fetch?

+0

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

+0

@bredikhin Но я только что снял эти коммиты - почему в мире они будут классифицироваться как не нажатые? Вот где я в замешательстве. Почему, когда я извлекаю изменения из удаленной ветви, я не просто получаю сообщение «ничего не делать (рабочий каталог« чистый ») сразу? – Dannyboy

+0

Возможно ли, что перед тем, как вы запустили 'git status' во второй раз, вы запустили' git push'? – micromoses

ответ

2

Текст «вперед или назад по X фиксирует» в git status основан на состоянии ветви отслеживания для текущей ветви; remotes/origin/master если вы на master, например.

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

Запуск git fetch без каких-либо аргументов, с другой стороны, делает обновляет все удаленные ветви отслеживания, поэтому сообщение уходит. git pull без аргументов делает то же самое.

Незначительная добыча, которую я сам ударил кучкой раз! Я хочу, чтобы git обновил все удаленные ветви отслеживания на каждой выборке на конкретном удаленном устройстве.

+0

Просто из любопытства, вы знаете * почему *' git pull 'не обновляет *' remote/branch' * ref? Это просто истерические изюминки, или есть какая-то веская причина? – torek

+0

Получается, что на самом деле это не 'git pull ' вообще; это действительно 'git pull '. «Refspec» - это в основном пара-источник-получатель, разделенная двоеточием, например 'master: origin/master'; 'git pull origin master: origin/master' означает« перейти к удаленному источнику, дать мне свою главную ветку и обновить origin/master в локальном репозитории ». Если вы оставите двоеточие, fetch не будет обновлять локальные ссылки вообще, просто 'FETCH_HEAD'. –

+0

Дополнительная литература: http://git-scm.com/book/en/Git-Internals-The-Refspec –

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

  • Нет связанных вопросов^_^