2015-11-04 5 views
0

Как я могу получить тот же результат от git log после git fetch, как я получаю после git pull?Git log after git fetch

Я клонировал два одинаковых репозитория. Только clone для первого и с --bare флаг для второго. Через некоторое время я выполнил git pull для первого репозитория и git fetch для второго.

Если я попытаюсь проверить git log для репозиториев, я получаю разные результаты.

cd ~/first 
git pull 
git log --all --oneline | wc -l 
21962 

cd ~/second.git 
# second 
git fetch 
git log FETCH_HEAD --all --oneline | wc -l 
21903 
+0

Можете ли вы подробно рассказать о различиях между этими журналами? – rodrigo

+0

Почему вы указали FETCH_HEAD во второй команде журнала вместо этой же команды для обоих? Вы уже используете '-all'. –

ответ

1

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

+0

Не работает. 'git merge' возвращает ' fatal: эта операция должна выполняться в дереве работ – Anton

+0

@ Это работает. Проблема в том, что вы работаете в репозитории 'bare'. См. [This] (http://stackoverflow.com/questions/11931840/getting-fatal-this-operation-must-be-run-in-a-work-tree-on-bare-repository). Вы не можете запустить 'git pull' во втором репозитории, потому что git не может выполнить' git merge' без рабочего дерева. – houtanb

0

Существует небольшая разница в git fetch и git pull.

Git fetch используется для получения последней информации с удаленного устройства, в то время как Git pull используется для извлечения содержимого пульта дистанционного управления и объединения его с вашей веткой.

Pull = fetch + Merge.

Итак, как вы сказали, выборка будет отображать только журнал вашей ветки, однако git pull отобразит полный журнал после объединения с удаленными изменениями.

надеюсь, что он ответил на ваш вопрос.

0

Из git-log страницы руководства:

--all 
    Pretend as if all the refs in refs/ are listed on the command line as <commit>. 

Использование --all, журнал мерзавец будет смотреть на все главы (местных филиалов), удаленных филиалов и тегов и записей шоу журнала за все в графике, который достижимый из любой из этих ссылок.

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

Однако другие вещи могут быть непротиворечивыми. Не аннотированные теги не могут быть разделены между ними, и локальные ветви могут отличаться.

В вашем втором репо вы используете --bare. По определению у вас нет выписки. Это означает, что вы не проверили какие-либо местные филиалы. В вашем первом репо могут быть не общие локальные ветви (например, ветви темы или функции). Если это так, это может повлиять на выход журнала при использовании --all.

Штампы также хранятся под refs/. Любые stashes в вашем первом репо будут влиять на журнал git по сравнению с журналом второго репо.