Здесь действуют обычные предупреждения о переписывании истории Git - ваша история больше не будет совпадать с другими копиями хранилища, вы должны принудительно нажимать, но принудительное нажатие опасно, поэтому вы должны вместо этого --force-push-with-lease
и т. Д. Я не буду подвергать сомнению Ваши мотивы здесь, так как я думаю, что должно быть хорошо известно, что неподписанная история Git от стороннего производителя легко подделывается - вы можете также легко добавить любого автора, которого пожелаете, в свою историю Git. Что касается меня, я немного недоволен тем, что мои личные привычки и цикл бодрствования / сна могут быть удалены из моей учетной записи GitHub, поэтому я могу понять желание очистить эти данные.
Как это сделать
Трудная часть заключается в корректной обработке даты внутри скрипта оболочки. Даты в фильтре будут заданы в формате, заданном date +'@%s %z'
, например, @1536176083 -0400
может быть одним из значений. Проблема заключается в том, что такая календарная арифметика, как «четыре месяца спустя», на самом деле даже не возможна в этот момент, потому что, не зная, что такое исходный часовой пояс, мы не можем знать, будет ли правильное смещение часового пояса через четыре месяца. Другими словами, Git просто не хранит часовой пояс , поэтому, если вы хотите сохранить часовой пояс, вы должны восстановить его, что сложно.
То, что мы можем сделать, довольно легко, это просто изменить временную метку, добавив или вычтя количество секунд, а затем просто поместив все в местный часовой пояс. Например,
git filter-branch --env-filter '
set $GIT_COMMITTER_DATE
GIT_COMMITTER_DATE=@$((${1#@} + 24*60*60))
set $GIT_AUTHOR_DATE
GIT_AUTHOR_DATE=@$((${1#@} + 24*60*60))
'
Это будет перезаписывать коммиты через 1 день после исходного значения (24*60*60
- это день). Часовой пояс будет местным часовым поясом для всего. Если вы хотите сохранить часовые пояса исходных коммитов, это становится более сложной проблемой, которая, вероятно, потребует большего ручного вмешательства.
Если вы хотите выбрать определенный часовой пояс, вы можете установить переменную окружения TZ
при запуске Git.