Я видел это несколько раз, но нет точных ответов о том, как его решить.
Я пошел и запустил это в своей ветке, чтобы переписать историю авторов:
git filter-branch --env-filter '
OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
Затем я выдал git push --force --tags origin 'refs/heads/*'
и подумал, что все прошло хорошо. Пока я не открыл SourceTree и не увидел, что у меня есть куча коммитов, чтобы вытащить, я потянул и толкнул, не задумываясь. Вероятно, он выполнил еще один пуш без --force
, и теперь почти каждый коммит дублируется.
Я попытался перебазировать в интерактивном режиме, используя rebase -i HEAD~
, но он упорядочивает коммиты на основе истории предков (или чего-то подобного), делая практически невозможным подавление дублирующих коммитов, которые сотнями на мастере.
Есть ли способ исправить это ответственно?