Обновление git commit date автора при внесении изменений

305

Я обнаружил, что изменяю свои коммиты довольно часто. Я не stashтак много, потому что я склонен забывать, что я сделал это, особенно когда я хочу сохранить то, что я сделал, перед отъездом или перед выходными, поэтому я делаю «черновой» коммит. Единственное, что, когда я изменяю коммит, он по-прежнему устанавливается с первоначальной датой автора. Есть ли (простой) способ обновить его при внесении изменений?

ksol
источник
5
Это особенно полезно, когда вы выполняете интерактивное перебазирование и ожидаете, что GitHub будет отображать коммиты в запросе на извлечение в древовидном порядке вместо даты.
Sukima

Ответы:

368

Вы можете изменить дату автора с --dateпараметром на git commit. Итак, если вы хотите изменить последний коммит и обновить дату его автора до текущей даты и времени, вы можете сделать:

git commit --amend --date="$(date -R)"

( -RПараметр, который dateуказывает ему выводить дату в формате RFC 2822. Это один из форматов даты, понимаемыхgit commit .)

Марк Лонгэйр
источник
27
FTR, похоже на OS X, dateне знает -R. Использование dateбез опций все равно
сделало
7
Обратите внимание , что если вы хотите , чтобы это в качестве псевдонима вам нужно добавить !и избежать кавычки, напримерcan = !git commit --amend --date=\"$(date -R)\"
Fabian Steeg
9
date -Rне работает на OSX, используйте date +%sвместо этого
stash
4
То же git commit --amend --date="$(date +%s)"
самое
120
git commit --amend --date=nowработает также. Нет необходимости вызывать подоболочку с командой date (1) . Вы можете увидеть это в исходном коде git (1) в date.c 'now' - это специальное значение, которое конвертируется с помощью функции date_now (). То же самое для «полдня», «вчера», «полуночи», «чая» и других, перечисленных в специальном массиве структур [].
Сб
267

Еще один способ сделать это

git commit --amend --reset-author

Это не только меняет автора коммита, но и дату, но если изначально это был ваш незафиксированный коммит, то это не вариант.

Вы также можете добавить, --no-editесли вы хотите обновить дату нескольких коммитов, но хотите, чтобы сообщения о коммитах оставались нетронутыми. Таким образом, вам не будет предложено редактировать сообщение для каждого коммита.

Руп
источник
4
Интересно, почему это поведение не по умолчанию и должно быть указано явно. Это очень удивительно и приводит к потенциально плохим последствиям. В моем понимании git commit --amend изменения фиксируют, а не просто настраивают или что-то в этом роде, то есть это приводит к различной истории изменений содержимого репозитория, где любая система контроля версий является очень строгой. И поэтому я интуитивно ожидаю, что и автор, и дата соответствуют фактическим данным коммита. Особенно важно авторство, даже не дата. Голосуйте за этот комментарий, если вы хотите победить разработчиков git, ответственных за такой дефолт. :)
Артем Писаренко
258

Начиная с Git v2.1.4 (протестировано на Debian 8 (Jessie))

git commit --amend --date=now
Камаль
источник
8
И если вы не хотите снова видеть сообщение о коммите, добавьте --no-edit.
Хенрик Н
12

Мне нравится ответ Марка, и я сам несколько раз использовал его, но сейчас я работаю на OS X и date -Rне поддерживается. Но все гораздо проще, чем заставил задуматься оригинальный ответ, просто используйте пустую строку !

git commit --date= --amend
JLarky
источник
6
Это не работает Git прерывается с ошибкойfatal: invalid date format:
Никос С.
Работал для меня (на Windows, Git 1.9.4)
Csq
1
Лучше использовать --date="$(date)"в OS X. Опция -RGNUism.
Руда Моура
0

Я создал этот пакет npm, если кто-то все еще ищет простой способ изменить даты нескольких коммитов.

https://github.com/bitriddler/git-change-date

Использование:

npm install -g git-change-date
cd [your-directory]
git-change-date
Карим Эльбахравы
источник
17
Один действительно нуждается в другом npmпакете? Нет, научитесь использовать gitкоманду как есть.
Урда