Вы ищете режим --env-filter
ответвления фильтра. Соответствующие переменные среды: GIT_AUTHOR_NAME
, GIT_AUTHOR_EMAIL
, GIT_AUTHOR_DATE
, GIT_COMMITTER_NAME
, GIT_COMMITTER_EMAIL
и GIT_COMMITTER_DATE
.
Ваша команда будет выглядеть примерно так:
git filter-branch --env-filter '
export GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"
export GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"
export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"' -- --all
--all
указывает, что это должно работать во всех ветвях. Ваши исходные ссылки будут сохранены в пространстве имен ссылок / оригиналов на случай, если вы ошибетесь.
И, конечно, я не могу публиковать что-либо подобное без предупреждения об опасности для тех, кто может случиться с ним. От man git-filter-branch:
ВНИМАНИЕ! Переписанная история будет иметь разные имена объектов для всех объектов и не будет сходиться с исходной ветвью. Вы не сможете легко перемещать и распространять переписанную ветку поверх оригинальной ветви. Пожалуйста, не используйте эту команду, если вы не знаете всех последствий, и избегайте ее использования в любом случае, если для решения вашей проблемы будет достаточно простого коммита. (Обратитесь к разделу «ВОССТАНОВЛЕНИЕ ИЗ РЕБАЗЫ UPSTREAM» в git-rebase (1) для получения дополнительной информации о перезаписи опубликованной истории.)