Использование интерактивной перебазировки
Вы могли бы сделать
git rebase -i -p <some HEAD before all of your bad commits>
Затем пометьте все ваши плохие коммиты как "edit" в файле rebase. Если вы также хотите изменить свой первый коммит, вы должны вручную добавить его в качестве первой строки в файле rebase (следуйте формату других строк). Затем, когда git попросит вас изменить каждый коммит, выполните
git commit --amend --author "New Author Name <email@address.com>"
отредактируйте или просто закройте открывшийся редактор, а затем выполните
git rebase --continue
для продолжения перебазирования.
Вы можете вообще пропустить открытие редактора, добавив --no-edit
так что команда будет:
git commit --amend --author "New Author Name <email@address.com>" --no-edit && \
git rebase --continue
Single Commit
Как отмечают некоторые из комментаторов, если вы просто хотите изменить самый последний коммит, команда rebase не нужна. Просто сделай
git commit --amend --author "New Author Name <email@address.com>"
Это изменит автора на указанное имя, но для коммиттера будет настроен ваш настроенный пользователь в git config user.name
и git config user.email
. Если вы хотите установить для коммиттера что-то, что вы укажете, это установит и автора, и коммиттера:
git -c user.name="New Author Name" -c user.email=email@address.com commit --amend --reset-author
Примечание по слияниям
В моем первоначальном ответе был небольшой недостаток. Если есть какие-либо коммиты слияния между текущим HEAD
и вашим <some HEAD before all your bad commits>
, то git rebase
сгладит их (и, между прочим, если вы используете GitHub pull-запросы, в вашем комитете слияния будет тонна коммитов история). Это может очень часто приводить к очень разной истории (поскольку повторяющиеся изменения могут быть «перебазированы»), и в худшем случае это может привести к git rebase
, требующему разрешения сложных конфликтов слияния (которые, вероятно, уже были разрешены при слиянии совершает). Решение заключается в использовании флага -p
для git rebase
, который сохранит структуру слияния вашей истории. Страница man для git rebase
предупреждает, что использование -p
и -i
может привести к проблемам, но в разделе BUGS
написано "Редактирование коммитов и переписывание их сообщений коммитов должно работать нормально."
Я добавил -p
к вышеуказанной команде. Для случая, когда вы просто изменяете самый последний коммит, это не проблема.