Как сохранить время коммита, который должен быть раздавлен в другой? - PullRequest
2 голосов
/ 19 октября 2010

Я работаю в ветке 'развернуть', и когда буду готов объединиться с мастером, использую интерактивную перебазировку, чтобы объединить все мои маленькие коммиты в один коммит, включающий в себя функции, который я применяю поверх мастер.Работает хорошо, единственная проблема, которая у меня есть - это время, когда коммит помечен, это первый маленький коммит.Это имеет смысл, так как это единственный коммит, который «выбран», остальные «сдавлены».Кто-нибудь знает, как сделать так, чтобы коммит был отмечен временем последнего маленького коммита, а не первым?Возможно, это можно сделать, «отредактировав» самый ранний коммит и сдавив более поздние коммиты в этот коммит (который я предположительно могу редактировать свойством времени), однако есть ли лучший способ?

Ответы [ 2 ]

5 голосов
/ 19 октября 2010

Если вы не можете просто переставить коммиты, чтобы выбрать тот, на который вы хотите установить дату (например, потому что последний коммит не будет применяться поверх родительского элемента первого коммита), вы можете попробовать следующий метод.

Если вы собрали вместе ваш Develop в один коммит на Develop , то вы можете использовать git show и рефлог Develop , чтобы извлечьдата первоначального финального коммита (до сдавливания), а затем измените дату вашего нового коммита с помощью git commit --date=.

git commit --amend -C HEAD --date="$(git show --pretty=format:%ad develop@{1})"

Это исправляет (--amend) коммит HEAD так, что

  • он имеет сообщение о фиксации и дату из HEAD,
    (-C HEAD; при этом избегается запуск редактора для сообщения о фиксации, чтобы просто немедленно выйти из него без внесения каких-либо изменений; оставьте эту часть отключенной, если вы на самом делехотите отредактировать сообщение о фиксации, а также изменить дату)
  • его дата
    (--date=)
    • совпадает с самой последней предыдущей подсказкой development
      ("$(git show --pretty=format:%ad develop@{1})").

Если у develop@{1} нет нужной даты, вы можете использовать git log -g develop, чтобы найти фиксацию с нужной датой.

4 голосов
/ 19 октября 2010

Измените порядок коммитов, чтобы тот, у которого есть временная метка, которую вы хотите сохранить, является pick ed, а затем squash всего остального в этот.

...