Подтвердить что ты не робот

GIT: изменить дату фиксации на дату автора

Можно ли изменить дату фиксации с моей фиксации на дату автора?

Я адаптировал некоторые фиксации, и теперь даты все одинаковы. Я хочу вернуть его к старым датам (или датам автора). Возможно ли это?

Я использую Sourcetree, поэтому у меня есть командная строка git, но я не профессионал в этом. Мой внешний репозиторий - битбакет.

4b9b3361

Ответ 1

Так как git 1.6.3 git rebase имеет --committer-date-is-author-date для этой цели.

git rebase --committer-date-is-author-date

Оригинальный ответ:
Нет простого способа установить даты коммиттера (изменить: но см. "Редактировать 2" ниже). Даты автора легко настраиваются (в момент фиксации), так как --date позволяет вам указывать каждый по ходу.

Переменная окружения GIT_COMMITTER_DATE может использоваться для принудительного создания другой метки времени в момент совершения фиксации. Обратите внимание, однако, что вам нужно будет настроить это для каждой фиксации, которую вы переиграете. В результате новый коммит будет иметь другой SHA-1 (потому что вы изменили в нем некоторые биты, а именно поле даты коммиттера), что означает, что вы должны переделать все свои последующие транзакции.

Это то, что git filter-branch делает (воссоздает некоторые, многие или все коммиты с изменениями, выполненными по пути, сохраняя сопоставление от старых идентификаторов SHA-1 с новыми идентификаторами SHA-1 и корректируя родительские установки четно- в противном случае - нетронутая фиксация копий, так что "новая" DAG новых идентификаторов SHA-1 будет соответствовать "старой" DAG всеми возможными способами, то есть любым способом, кроме идентификаторов SHA-1 и любых других изменений, сделанных вашим фильтром (s )).

Другими словами, для этого вы должны использовать git filter-branch для перезаписи истории со всем, что это подразумевает. [Редактировать: вы можете буквально сделать это без git filter-branch, например, сделав это в git rebase -i, но эффект тот же.]

Изменить 2: как указано в комментарии (после удаления), git rebase имеет --committer-date-is-author-date для этой цели. Он по-прежнему выполняет ту же историю перезаписи, но гораздо удобнее, чем делать с помощью команды raw git filter-branch.

Ответ 2

git filter-branch --env-filter 'export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"'