Есть ли способ заставить git-reflog показывать дату рядом с каждой записью?

305

Команда git-reflog по умолчанию не показывает дату рядом с каждой записью, что кажется мне странным упущением; Я думаю, что это было бы очень полезно.

Существуют ли какие-либо параметры командной строки или другие настройки, которые можно использовать, чтобы он отображался при добавлении каждой записи reflog? Страница руководства не предвидится ...

Эндрю Ферье
источник

Ответы:

453

По мере написания справочной страницы вы можете использовать параметры git log, скажем, git reflog --pretty=shortили любые другие, которые вам нравятся

пытаться

git reflog --date=iso
Балог Пал
источник
11
Это заменяет номер головы (или любой другой правильный термин) на дату. Вы можете иметь оба?
Марко Экштейн
7
@Marco, кажется , вам придется использовать пользовательский формат: git reflog --format='%C(auto)%h %<|(17)%gd %C(blue)%ci%C(reset) %s'. Я добавил псевдоним для этого: github.com/blueyed/dotfiles/commit/...
blueyed
1
@blueyed Не совсем то же самое - команда --date=isoreflog показывает, когда была создана эта запись reflog, а не время фиксации. Все еще ценю ваш псевдоним, поскольку я использовал его, чтобы сделать красивый рефлог.
Йохан Хенкенс
36

Вы можете использовать --walk-reflogsвариант git log:

git log -g

Это довольно многословно по умолчанию и печатает дату среди прочего. Вы можете отформатировать его со стандартным --pretty=флагом.

Вы также можете использовать команду reflog напрямую с --pretty=флагом для форматирования вывода.

git reflog --pretty='%cd %h %gd %gs'

В указанном выше формате %cdслева от обычного вывода reflog отображается дата принятия.

Клас Меллборн
источник
9
%cd, показывает дату коммита, на который указывает reflog, к сожалению, это не то, после чего я (или OP): мы хотим дату записи reflog.
Танатос
10
git log --walk-reflogs --date=isoтолько что сделал мой день
Алоис Махдал
7

Вы должны использовать пользовательский формат:

git reflog --format='%C(auto)%h %<|(20)%gd %C(blue)%cr%C(reset) %gs (%s)'

В указанном выше формате %hэто хеш коммита, %crотносительная дата %gsкоммиттера, тема рефлога и тема %sкоммита. Посмотрите на документы git-log для других возможных заполнителей. Например, использование %ciвместо %crпокажет абсолютные даты принятия.

Вы можете сохранить это в вашем ~ / .gitconfig, используя пользовательский prettyформат и обращаться к нему через псевдоним:

[alias]
    rl = reflog --pretty=reflog
[pretty]
    reflog = %C(auto)%h %<|(20)%gd %C(blue)%cr%C(reset) %gs (%s)
голубовато
источник
1
Проблема в том, что %gdэта дата @{now}не совпадает с датой . При поиске рефлога очень важно знать точное время (например, «Я знаю, что оно было в правильном состоянии в 8:57»).
ErikE
2
@ErikE - Просто измените на, crчтобы ciполучить полную метку времени каждого действия:git reflog --format='%C(auto)%h %<|(20)%gd %C(blue)%ci%C(reset) %gs (%s)'
n1k31t4
6

Скажите gitв каком формате, либо подсчитанные reflogзаписи или синхронизированные reflogзаписи, т.е.

$ git reflog @{now}

$ git reflog @{0}
gitster
источник
Программист во мне не любит «естественный язык» дат внутри {}, но, к счастью, эта техника тоже работает --date=iso.
mwfearnley
5

Примечание git 2.10 (3 квартал 2016 года) улучшает документацию о дате с git reflog.

См. Коммит 642833d , коммит 1a2a1e8 (27 июля 2016 г.) и коммит d38c7b2 , коммит 522259d , коммит 83c9f95 , коммит 2b68222 (22 июля 2016 г.) Джеффом Кингом ( peff) .
Помогает: Джефф Кинг ( peff) .
(Объединено Junio ​​C Hamano - gitster- в коммите 0d32799 , 8 августа 2016 г.)

В rev-listопции обновляется :

Обозначение рефлога в выходных данных может быть показано как ref@{Nth}(где Nthобратный хронологический индекс в рефлоге) или как ref@{timestamp}(с отметкой времени для этой записи), в зависимости от нескольких правил.

Включает в себя : - обновление о --date=raw:

показывает дату в секундах с начала эпохи (1970-01-01 00:00:00 UTC), затем пробел, а затем часовой пояс в виде смещения от UTC (a +или -с четырьмя цифрами; первые две - часы, и вторые две минуты).
Т.е. как бы метка времени была отформатирована с помощью strftime("%s %z")).
Обратите внимание, что -localопция не влияет на seconds-since-epoch значение (которое всегда измеряется в UTC), но переключает соответствующее значение часового пояса.

И новый вариант: --date=unix

показывает дату как метку времени эпохи Unix (секунды с 1970 года).
Как и в случае --raw, это всегда в UTC и, следовательно -local, не имеет никакого эффекта.

VonC
источник