2010-05-27 2 views
69

Я совершил кучу коммитов к проекту в Github, однако я понял, что не создал правильное имя электронной почты и полное имя коммиттера на компьютере, который я сейчас использую для сделайте мои коммиты, и поэтому аватара и адрес электронной почты пользователей не существует.Git, переписать предыдущие фиксации имен пользователей и писем

Как я могу переписать все прошлые адреса электронной почты и имена пользователей?

+6

Возможный дубликат [Как изменить автора фиксации в git?] (Http://stackoverflow.com/questions/750172/how-do-i-change-the-author-of-a-commit -in-git) – givanse

ответ

108

Вы можете использовать этот псевдоним, так что вы можете сделать:

git change-commits GIT_AUTHOR_NAME "old name" "new name" 

или за последние 10 фиксаций:

git change-commits GIT_AUTHOR_EMAIL "[email protected]" "[email protected]" HEAD~10..HEAD 

Alias:

change-commits = "!f() { VAR=$1; OLD=$2; NEW=$3; shift 3; git filter-branch --env-filter \"if [[ \\\"$`echo $VAR`\\\" = '$OLD' ]]; then export $VAR='$NEW'; fi\" [email protected]; }; f " 

Источник: https://github.com/brauliobo/gitconfig/blob/master/configs/.gitconfig

Надежда это полезно.

+1

Спасибо, он отлично работает! – josal

+1

Я не получил свои теги, но это работает. Благодарю. – Bharat

+5

Также «git change-commits GIT_COMMITTER_EMAIL« [email protected] »« [email protected] »', чтобы изменить сообщение коммиттера. –

50

Решение уже есть: Change the author and committer name and e-mail of multiple commits in Git

А именно,

git filter-branch -f --env-filter \ 
"GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='newemail'; \ 
GIT_COMMITTER_NAME='committed-name'; GIT_COMMITTER_EMAIL='committed-email';" HEAD 
+2

не изменит ли это имя автора для всех коммитов (всей истории) филиала? – hasen

+2

Да, это изменило бы все фиксации на новую информацию об авторе. – ewall

+2

Пожалуйста, отметьте вопросы как дубликаты вместо копирования, вставляющего ответ. – givanse

20

Если вы уже вынудили некоторые из ваших коммитов в общедоступном хранилище, вы не хотите сделать это, или сделал бы альтернативную версию истории мастера, которую другие могли использовать. «Не переходите через потоки ... Это было бы плохо ...»

Это означает, что если это только фиксации, сделанные вами в вашем локальном хранилище, то обязательно исправьте это, прежде чем нажимать на сервер. Вы можете использовать команду git filter-branch с опцией --commit-filter, поэтому он редактирует только коммиты, которые соответствуют вашой неверной информации, например:

git filter-branch --commit-filter ' 
     if [ "$GIT_AUTHOR_EMAIL" = "[email protected]_host.local" ]; 
     then 
       GIT_AUTHOR_NAME="Your Name Here (In Lights)"; 
       GIT_AUTHOR_EMAIL="[email protected]_host.com"; 
       git commit-tree "[email protected]"; 
     else 
       git commit-tree "[email protected]"; 
     fi' HEAD 
7

После применения ответ Оливье Вердье в:

git filter-branch -f --env-filter \ 
"GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='newemail'; \ 
GIT_COMMITTER_NAME='committed-name'; GIT_COMMITTER_EMAIL='committed-email';" HEAD 

... толкать измененную историю на оригинальном использовании хранилища:

git push origin +yourbranch 

Приведенная выше команда (обратите внимание на плюс) сил переписывания истории на исходном репо. Используйте с осторожностью!

+0

Работал для меня, также правильно переписал историю происхождения. – Xeverous

+0

Это будет переписывать ВСЕ коммиты - независимо от того, кто его создал. Используйте с осторожностью. –

Смежные вопросы