Почему git log не показывает ничего нового после git fetch?

я узнаю о работе с пультами git, прочитав соответствующий раздел книги Pro Git.

если вы клонируете репозиторий, команда автоматически добавляет, что удаленный репозиторий под именем Origin. Итак,git fetch origin извлекает любую новую работу, которая была перенесена на этот сервер с момента клонирования (или последнего извлечения).

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

вот что я пробовал. Я клонировал хранилище и редактировал файл. В исходном репозитории кто-то обновил тот же файл и нажал. Затем:

  1. я побежал git fetch. Он показал сообщение о ходе обновления. Однако,git log не показывать это обновление. Я неправильно понял, что git fetch делает? Я что-то упускаю?

  2. я побежал git pull, а я

ошибка: локальные изменения в 'она.c ' будет перезаписан merge. Прерывание. Пожалуйста, зафиксируйте свои изменения или спрячьте их, прежде чем вы сможете объединить.

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

Edit: Спасибо за ответы. На самом деле, прежде чем смотреть ответы, я пробовал сам и понял то же самое со следующими командами / выходами:

$ git ls-remote origin
d0006a6bfa95e0e90aa820a0e50d31a548625652    HEAD
d0006a6bfa95e0e90aa820a0e50d31a548625652    refs/heads/master
$ git ls-remote .
14375458b8a6b84f82d9fa4d2ded0bb8c9e87431    HEAD
14375458b8a6b84f82d9fa4d2ded0bb8c9e87431    refs/heads/master
d0006a6bfa95e0e90aa820a0e50d31a548625652    refs/remotes/origin/HEAD
d0006a6bfa95e0e90aa820a0e50d31a548625652    refs/remotes/origin/master

также со следующими командами:

$git log origin --oneline
$git log --oneline

Спасибо за терпение с моими глупыми вопросами ; -)

4 ответов


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

git log можно взять --all возможность показать историю всех филиалов, локальных и удаленных. Кроме того, вы можете явно указать удаленного филиала в git log origin/master.


вы писали

однако журнал git не показал это обновление. Я неправильно понял, что делает git fetch? Я что-то упускаю?

вы, кажется, смущены тем, что оба git log и git fetch do.

при предположении, что ветвь называется master в настоящее время проверено-вы также можете быть в состоянии отстраненной головы, но давайте держать вещи простыми, ради этого объяснения-команда git log, без каких-либо других аргументы, эквивалентны git log master. Эта команда предписывает

Покажи мне все коммиты, которые находятся в родословной местного master филиала.

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

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

что вы, вероятно, хотите, чтобы запустить

git fetch origin

чтобы получить все новые коммиты из origin и помещает их в ветви удаленного отслеживания (включая origin/master здесь), а потом

git log master..origin/master

показать журнал всех "новые" коммиты, которые были добавлены на удаленном master ветвь, т. е. ветвь, которая живет на удаленном сервере, вы знаете как origin, который ваш пульт дистанционного отслеживания ветви origin/master отслеживает.


после git fetch, ваше локальное РЕПО знает изменения из удаленного РЕПО, но еще не применяло их к вашим локальным филиалам.

git log без дополнительных параметров показывает журнал текущей ветви – и вы еще не объединили удаленные изменения в эту ветку.

git pull тут git fetch и git merge FETCH_HEAD.

ваше сообщение об ошибке означает, что в вашем локальном РЕПО есть незафиксированные изменения. Вы можете зафиксировать или спрятать их (как указано в сообщении) и попробуй!--5--> (или pull) еще раз.


ваши локальные ветви никогда не обновляются из выборки, только ветви отслеживания,git pull С другой стороны действительно,

git pull = git fetch + git merge

вы не можете видеть никаких обновлений в git log просто потому, что вы запускаете его на неправильной ветке, чтобы увидеть ваши изменения от просто git fetch тогда вам нужно git log на правой ветке, которая в вашем случае будет

git log origin/master