Как изменить несколько коммитов в Git, чтобы изменить автора

Я сделал серию коммитов в Git, и теперь понимаю, что я забыл правильно настроить свойства имени пользователя и пользователя электронной почты (новая машина). Я еще не подтолкнул эти коммиты к моему репозиторию, так как я могу исправить эти коммиты, прежде чем я это сделаю (только 3 последних коммита на главной ветке)?

Я смотрел git reset и git commit -C <id> --reset-author, но я не думаю, что нахожусь на правильном пути.

88
задан pauldoo 13 февр. '11 в 1:48
источник поделиться

5 ответов

Rebase/modify кажется неэффективным, когда у вас есть мощность ветки фильтра:

git filter-branch --env-filter 'if [ "$GIT_AUTHOR_EMAIL" = "incorrect@email" ]; then
     GIT_AUTHOR_EMAIL=correct@email;
     GIT_AUTHOR_NAME="Correct Name";
     GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL;
     GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; fi' -- --all

(разделить строки для ясности, но не обязательно)

Обязательно проверяйте результат, когда вы закончите, чтобы убедиться, что вы ничего не изменили, что вы не хотели!

104
ответ дан Jefromi 13 февр. '11 в 6:33
источник поделиться

Интерактивный подход к переадресации довольно хорош при использовании в сочетании с exec. Вы можете запустить любую команду оболочки против определенного коммита или всех коммитов в rebase.

Сначала установите настройки автора git

git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

Затем до reset автор для всех фиксирует после заданного SHA

git rebase -i YOUR_SHA -x "git commit --amend --reset-author -CHEAD"

Это приведет к появлению вашего редактора, чтобы подтвердить изменения. Все, что вам нужно сделать, это сохранить и выйти, и оно пройдет через каждое коммит и запустит команду, указанную в флагов -x.

В комментарии @Dave ниже вы также можете изменить автора при сохранении исходных временных меток с помощью:

git rebase -i YOUR_SHA -x "git commit --amend --author 'New Name <new_address@example.com>' -CHEAD"
68
ответ дан Alex 12 сент. '14 в 22:05
источник поделиться

Чтобы изменить автора только для последнего фиксации:

git commit --amend --author 'Author Name <author.name@mail.com>' --no-edit

Предположим, вы хотите изменить автора только для последних N коммитов:

git rebase -i HEAD~4 -x "git commit --amend --author 'Author Name <author.name@mail.com>' --no-edit"

ПРИМЕЧАНИЯ

  • флаг --no-edit гарантирует, что git commit --amend не запрашивает дополнительное подтверждение
  • когда вы используете git rebase -i, вы можете вручную выбрать коммиты, где можно изменить автора,

файл, который вы редактируете, будет выглядеть так:

pick 897fe9e simplify code a little
pick abb60f9 add new feature
exec git commit --amend --author 'Author Name <author.name@mail.com>' --no-edit
pick dc18f70 bugfix
34
ответ дан Chris Maes 28 июля '15 в 10:19
источник поделиться

Я считаю, что вы ищете git rebase --interactive

Он позволяет вам перейти reset к определенному фиксации, а затем перейти к изменению истории добавления или группировки коммитов

Здесь у вас есть объяснение http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase-interactive

3
ответ дан Fernando Diaz Garrido 13 февр. '11 в 2:16
источник поделиться

Если вы чувствуете себя небезопасно в отношении снижения и исправления, вы можете сделать это таким образом. В то же время вы также будете устанавливать глобальную конфигурацию, которую вы, вероятно, хотели бы сделать в любом случае.

git reset HEAD~ (отменить последнее коммит)

git config --global user.name "Your Name"

git config --global user.email you@example.com

git commit -m "message"

0
ответ дан tymac 13 окт. '17 в 6:21
источник поделиться

Другие вопросы по меткам