В git
, я вижу, что при использовании пользовательского форматирования для git log
возможны значения «reflog identity». Что такое идентификатор reflog?Что такое идентификатор git reflog?
ответ
Они относятся к 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.
git reflog
- это еще одна команда.
Каждый раз, когда HEAD
изменен, git сохранит его старое значение в своей папке .git/log
, и вы можете просмотреть его в команде git reflog.
meanning из "reflog идентичности" просто:
Каждый совершает будут сгруппированы по автору и названию
Удивительный ответ! Большое спасибо! – Mitar