2016-08-07 5 views

ответ

2

Они относятся к reflog записей. A reflog - это просто запись об изменениях в ссылка, а ссылка сама по себе является просто обобщением названий ветвей и тегов и специальных имен, таких как HEAD.

Рефлоги обычно включаются в клиентские репозитории (например, ваши) и обычно отключены в репозиториях сервера. Это, естественно, настраивается. Команда переднего конца, в основном использующая для просмотра своих логов, - git reflog. Вы можете запустить это сейчас, если хотите, но это не поможет объяснить %ge и так далее. Итак, мы сделаем что-то другое: запустите git log -g.

Выполняется git reflog в основном работает git log --oneline -g. Запустив git log -g самостоятельно, вы можете оставить --oneline и, следовательно, просмотреть более одной строки для каждой записи reflog.

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

commit 08b876daae9944d1a6fba271cfcd9629c13dfd69 
Reflog: [email protected]{0} (A U Thor <[email protected]>) 
Reflog message: commit: initial torturetest code 
Author: A U Thor <[email protected]> 
Date: Sun Aug 7 01:59:31 2016 -0700 

    initial torturetest code 

commit 8bb118938b5c6a2978f13e74525b594a48226571 
Reflog: [email protected]{1} (A U Thor <[email protected]>) 
Reflog message: checkout: moving from master to torturetest 
Author: Someone Else <[email protected]> 
Date: Sat Jul 16 02:00:46 2016 +0200 

    Allow backend ... 

Самый последний совершить это один я сделал вчера вечером (ну, сегодня утром). Это [email protected]{0}. Он представляет некоторую фиксацию (чье истинное имя - большой уродливый хэш SHA-1, начинающийся с 08b87...). У самой фиксации есть автор (меня, хотя я изменил название здесь для целей показа), дату, сообщение фиксации и т. Д., Но запись в reflog, [email protected]{0}, также имеет автора (меня снова), дату и сообщение.

В этом случае совершить «s автора и reflog автора является тем же. Даже сообщение reflog в основном совпадает с темой фиксации (строка Reflog message: так же, как вставлено слово commit:). Так что это не очень помогает, но посмотрите на следующий пример, зафиксируйте 8bb11....

Это reflog запись имеет меня как reflog автора, а кто-то еще, как совершить автор. Кроме того, reflog сообщение, checkout: moving from master to torturetest, полностью не связано с линией предмета фиксации, которая начинается с Allow backend.

Если вы сравните это с коротким выходом из git log -g --oneline или git reflog ОБЕ из них изучить reflog для HEAD -you'll видеть только reflog сообщения, вместе с идентификатором фиксации и селектором reflog.

Ещё одна вещь стоит здесь. В обычном git log выводах каждая фиксация обычно появляется только один раз. Однако в выводе git log -g фиксация может появляться повторно, потому что Git смотрит на идентификаторы хэша, хранящиеся в самом журнале. Если вы переключаетесь между ветвями, указывающими на одну и ту же фиксацию, или используйте git reset, чтобы изменить ветвь, чтобы указать на фиксацию, указанную ранее, или запустите git rebase или выполните любое количество похожих вещей, вы можете легко получить ссылка - это относится как к именам ветвей HEAD, так и к, которые указывают на одно и то же совершение в нескольких разных записях reflog.

В моем случае, например, я, видимо, колебался немного по имени torturetest или что-то:

08b876d [email protected]{0}: commit: initial torturetest code 
8bb1189 [email protected]{1}: checkout: moving from master to torturetest 
8bb1189 [email protected]{2}: checkout: moving from torturetest to master 

(я не совсем уверен, что это было о-возможно просто работает слишком много команд Git без запоминание которых хранилище я был :-))

Возвращаясь непосредственно к вопросу:.

Что такое reflog идентичность?

Это имена и адреса электронной почты, хранящиеся в каждой записи reflog. В случае частного репозитория Git, у вашего собственного клиента, это, вероятно, все будет одинаковым все время. Но так как вы можете запустить git config --global user.name "New User Name" и git config --global user.email [email protected] в любое время, чтобы их изменить, они могут отличаться.


, что кто-то другой также коммиттер, если вы получите интересно. Автор и коммиттер фиксации, а также их соответствующие даты и адреса электронной почты хранятся в самом коммите. Авторизатор, дата и адрес электронной почты хранятся в записи reflog. Сегодня это обычный текстовый файл, поэтому вы можете просто посмотреть .git/logs/HEAD и .git/logs/refs/heads/master, чтобы просмотреть необработанные данные reflog. Формат не особенно хорошо документирован, но довольно очевиден: он имеет старые и новые значения для ссылки; автору, журналу reflog, электронной почте и дате; и сообщение reflog.

Исключение здесь, кроме того, для самих reflogs конечно, происходит при использовании git log -m -p для разделить слияние совершает. Обычно git log пропускает слияние полностью, а git show показывает комбинированные разницы для них. (Документация по комбинированным различиям несколько похожа на поиск в StackOverflow для термина «комбинированные различия».)

Если вы убедите git log, чтобы показать diff, он также может отображать комбинированный diff. Во всех случаях комбинированные различия могут опускать важную информацию, поэтому вы можете сказать этим командам о том, что нужно сделать что-то другое: для каждого родителя слияния создайте разницу дерева объединения слияния с деревом определенного родителя. Это то, что делает флаг -m.

При отображении разности фиксации фиксации фиксации 1234567... против родителя # 1, Git показывает вам информацию о слиянии, затем разницу. Затем при отображении разности делегирования слияния 1234567... против родителя # 2 Git снова показывает вам информацию о слиянии, перед второй разницей. Так вот как git log может показывать одно и то же сообщение более одного раза.

Вы также можете использовать git -c user.name=whatever и git -c user.email=whatever, или в данном случае, переменные окружения специальный Git. Использование git -c особенно удобно для одноразовых испытаний, как в the answer I wrote recently about Git diff color options.

+0

Удивительный ответ! Большое спасибо! – Mitar

0

git reflog - это еще одна команда.

Каждый раз, когда HEAD изменен, git сохранит его старое значение в своей папке .git/log, и вы можете просмотреть его в команде git reflog.

meanning из "reflog идентичности" просто:

Каждый совершает будут сгруппированы по автору и названию