git squash и сохранить временную метку последнего коммита

Считайте, что у меня есть коммиты

<code>... -- A -- B -- C
</code>

Если я используюgit rebase -i раздавить все три коммита в один, мы могли бы

<code>pick A
squash B
squash C
</code>

Я вижу приведенный коммитA имеет свою оригинальную метку времени. Как заставить его наследовать метку времени коммита?C (последний)?

Что я могу думать о том,git commit --amend --date=<new_time>, но этот способ должен помнить метку времени коммитаC до сквоша или из рефлога.

Я считаю, что временная метка последнего коммита более разумна, потому что она показывает, когда я фактически закончил работу, которая находится в коммитах.

Благодарю.

Ответы на вопрос(2)

Решение Вопроса

Это не тривиальный способ сделать это, но есть несколько вариантов. Вот один из них:

git commit --amend --date="$(git show -s --pretty=tformat:%ai <sha1-of-C>)"

И другой:

git commit --amend -c <sha1-of-C>

Последнее изменит ваше существующее сообщение о коммите, поэтому вам придется его переписать.

 Crend King05 апр. 2012 г., 03:03
Почему вы используетеtformat?
 05 апр. 2012 г., 06:38
@CrendKing: в этом случае не имеет значения, является ли этоformat или жеtformat посколькуtformat символ новой строки удаляется по правилам подстановки команд оболочки. Однако в 99% случаев мне нужен последний перевод строки (или какой-либо еще терминатор), потому что я обычно анализирую вывод пользовательского журнала с помощью скрипта. Для того, чтобы я обычно печаталtformat когда это важно, я используюtformat даже когда это не имеет значения.

git commit --amend --reset-author

 18 янв. 2018 г., 02:39
Он не использует метку времени из C, он использует текущее время в качестве метки времени.
 20 дек. 2018 г., 12:39
Это не делает в точности то, что запрашивал OP, но (по крайней мере, на мой взгляд) ближе соответствует тому, что обычно требуется.

Ваш ответ на вопрос