Как изменить имя автора и коммиттера и адрес электронной почты нескольких коммитов в Git?
Я писал простой скрипт на школьном компьютере и вносил изменения в Git (в репо, которое было в моем pendrive, клонированном с моего компьютера дома). После нескольких коммитов я понял, что совершаю вещи как пользователь root.
есть ли способ изменить автора этих коммитов на мое имя?
30 ответов:
изменение автора (или коммиттера) потребует переписывания всей истории. Если вы в порядке с этим и думаете, что это стоит того, то вы должны проверить git filter-branch. Справочная страница содержит несколько примеров для начала работы. Также обратите внимание, что вы можете использовать переменные среды для изменения имени автора, коммиттера, даты и т. д. -- см. раздел" Переменные среды " в git man page.
в частности, вы можете исправить все неправильные имена авторов и электронные письма для всех ветвей и тегов С помощью этой команды (источник: GitHub help):
#!/bin/sh 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 rebase -i -p <some HEAD before all of your bad commits>
затем отметьте все ваши плохие коммиты как "редактировать" в файле 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
Один
как отметили некоторые комментаторы, если вы просто хотите изменить самую последнюю фиксацию, команда 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
, который сохранит структуру слияния вашей истории. Справочную страницуgit rebase
предупреждает, что, используя-p
и-i
может привести к проблемам, но вBUGS
в разделе говорится: "редактирование коммитов и переформулировка их сообщений о фиксации должны работать штраф."я добавил
-p
к вышеуказанной команде. Для случая, когда вы просто меняете самую последнюю фиксацию, это не проблема.
вы также можете сделать:
git filter-branch --commit-filter ' if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ]; then GIT_COMMITTER_NAME="<New Name>"; GIT_AUTHOR_NAME="<New Name>"; GIT_COMMITTER_EMAIL="<New Email>"; GIT_AUTHOR_EMAIL="<New Email>"; git commit-tree "$@"; else git commit-tree "$@"; fi' HEAD
обратите внимание, если вы используете эту команду в командной строке Windows, то вам нужно использовать
"
вместо'
:git filter-branch --commit-filter " if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ]; then GIT_COMMITTER_NAME="<New Name>"; GIT_AUTHOR_NAME="<New Name>"; GIT_COMMITTER_EMAIL="<New Email>"; GIT_AUTHOR_EMAIL="<New Email>"; git commit-tree "$@"; else git commit-tree "$@"; fi" HEAD
один лайнер, но будьте осторожны, если у вас есть многопользовательский репозиторий - это изменение все коммиты имеют один и тот же (новый) автор и коммиттер.
git filter-branch -f --env-filter "GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='new@email'; GIT_COMMITTER_NAME='Newname'; GIT_COMMITTER_EMAIL='new@email';" HEAD
с разрывами строк в строке (что возможно в bash):
git filter-branch -f --env-filter " GIT_AUTHOR_NAME='Newname' GIT_AUTHOR_EMAIL='new@email' GIT_COMMITTER_NAME='Newname' GIT_COMMITTER_EMAIL='new@email' " HEAD
это происходит, когда у вас нет $HOME/.gitconfig хранит настройки инициализации. Вы можете исправить это:
git config --global user.name "you name" git config --global user.email you@domain.com git commit --amend --reset-author
протестировано с Git версии 1.7.5.4
для одной фиксации:
git commit --amend --author="Author Name <email@address.com>"
(извлечено из ответа асмьюрера)
в случае, когда только верхние несколько коммитов имеют плохих авторов, вы можете сделать это все внутри
git rebase -i
С помощью и--amend
совершить следующим образом:git rebase -i HEAD~6 # as required
который представляет вам редактируемый список коммитов:
pick abcd Someone else's commit pick defg my bad commit 1 pick 1234 my bad commit 2
затем добавить
exec ... --author="..."
строки Ведь строки с плохими авторами:pick abcd Someone else's commit pick defg my bad commit 1 exec git commit --amend --author="New Author Name <email@address.com>" -C HEAD pick 1234 my bad commit 2 exec git commit --amend --author="New Author Name <email@address.com>" -C HEAD
сохранить и выйти из редактора (для запуска).
это решение может быть длиннее, чем некоторые другие, но оно очень управляемо - I точно знаю, что совершает его хиты.
спасибо @asmeurer за вдохновение.
Github имеет хорошее решение, что следующий скрипт:
#!/bin/sh git filter-branch --env-filter ' an="$GIT_AUTHOR_NAME" am="$GIT_AUTHOR_EMAIL" cn="$GIT_COMMITTER_NAME" cm="$GIT_COMMITTER_EMAIL" if [ "$GIT_COMMITTER_EMAIL" = "your@email.to.match" ] then cn="Your New Committer Name" cm="Your New Committer Email" fi if [ "$GIT_AUTHOR_EMAIL" = "your@email.to.match" ] then an="Your New Author Name" am="Your New Author Email" fi export GIT_AUTHOR_NAME="$an" export GIT_AUTHOR_EMAIL="$am" export GIT_COMMITTER_NAME="$cn" export GIT_COMMITTER_EMAIL="$cm" '
Как уже упоминалось в docgnome, переписывание истории опасно и будет нарушать репозитории других людей.
но если вы действительно хотите это сделать, и вы находитесь в среде bash (без проблем в Linux, на Windows, вы можете использовать Git bash, который поставляется с установкой git), используйте git filter-branch:
git filter-branch --env-filter ' if [ $GIT_AUTHOR_EMAIL = bad@email ]; then GIT_AUTHOR_EMAIL=correct@email; fi; export GIT_AUTHOR_EMAIL'
чтобы ускорить процесс, вы можете указать диапазон изменений, которые вы хотите переписать:
git filter-branch --env-filter ' if [ $GIT_AUTHOR_EMAIL = bad@email ]; then GIT_AUTHOR_EMAIL=correct@email; fi; export GIT_AUTHOR_EMAIL' HEAD~20..HEAD
при принятии несвязанного коммита от другого автора, есть простой способ справиться с этим.
git commit --amend --reset-author
это более проработанная версия версии @Brian:
чтобы изменить автора и коммиттера, вы можете сделать это (с разрывами строк в строке, которая возможна в bash):
git filter-branch --env-filter ' if [ "$GIT_COMMITTER_NAME" = "<Old name>" ]; then GIT_COMMITTER_NAME="<New name>"; GIT_COMMITTER_EMAIL="<New email>"; GIT_AUTHOR_NAME="<New name>"; GIT_AUTHOR_EMAIL="<New email>"; fi' -- --all
вы можете получить одну из этих ошибок:
- временный каталог уже существует
- ссылки, которые начинаются с судьи/оригинал уже есть
(это означает, что ранее была запущена другая ветвь фильтра репозиторий и затем исходная ссылка на ветку сохраняются в судьи/оригинал)если вы хотите принудительно запустить несмотря на эти ошибки, добавьте
--force
флаг:git filter-branch --force --env-filter ' if [ "$GIT_COMMITTER_NAME" = "<Old name>" ]; then GIT_COMMITTER_NAME="<New name>"; GIT_COMMITTER_EMAIL="<New email>"; GIT_AUTHOR_NAME="<New name>"; GIT_AUTHOR_EMAIL="<New email>"; fi' -- --all
небольшое описание
-- --all
может потребоваться опция: это делает работу фильтра-ветви на всех ревизиях на все рефы (который включает в себя все ветви). Это означает, например, что теги также переписываются и отображаются на экране. переписал ветки.распространенной "ошибкой" является использование
HEAD
вместо этого, что означает фильтрацию всех ревизий только на текущая филиала. И тогда никакие теги (или другие ссылки) не будут существовать в переписанной ветке.
вы можете использовать этот псевдоним, так что вы можете сделать:
git change-commits GIT_AUTHOR_NAME "old name" "new name"
или за последние 10 коммитов:
git change-commits GIT_AUTHOR_EMAIL "old@email.com" "new@email.com" HEAD~10..HEAD
псевдоним:
change-commits = "!f() { VAR=; OLD=; NEW=; shift 3; git filter-branch --env-filter \"if [[ \\"$`echo $VAR`\\" = '$OLD' ]]; then export $VAR='$NEW'; fi\" $@; }; f "
Источник:https://github.com/brauliobo/gitconfig/blob/master/configs/.gitconfig
надеюсь, что это полезно.
- выполнить
git rebase -i <sha1 or ref of starting point>
- отметить все коммиты, которые вы хотите изменить с
edit
(илиe
)выполните следующие две команды, пока не обработаете все коммиты:
git commit --amend --reuse-message=HEAD --author="New Author <new@author.email>"
;git rebase --continue
это сохранит всю другую информацию о фиксации (включая даты). Элемент
--reuse-message=HEAD
опция предотвращает запуск редактора сообщений.
Я использую следующее, чтобы переписать автора для всего репозитория, включая теги и все ветви:
git filter-branch --tag-name-filter cat --env-filter " export GIT_AUTHOR_NAME='New name'; export GIT_AUTHOR_EMAIL='New email' " -- --all
затем, как описано в MAN страница фильтра-branch, удалите все исходные ссылки, подкрепленные
filter-branch
(это разрушительно, сначала резервное копирование):git for-each-ref --format="%(refname)" refs/original/ | \ xargs -n 1 git update-ref -d
я адаптировал этот решение который работает, глотая простой
author-conv-file
(формат совпадает с форматом для git-cvsimport). Она работает путем изменения всех пользователей, как определено вauthor-conv-file
во всех ветвях.мы использовали это в сочетании с
cvs2git
чтобы перенести наш репозиторий из cvs в git.образец
author-conv-file
john=John Doe <john.doe@hotmail.com> jill=Jill Doe <jill.doe@hotmail.com>
сценарий:
#!/bin/bash export $authors_file=author-conv-file git filter-branch -f --env-filter ' get_name () { grep "^=" "$authors_file" | sed "s/^.*=\(.*\) <.*>$//" } get_email () { grep "^=" "$authors_file" | sed "s/^.*=.* <\(.*\)>$//" } GIT_AUTHOR_NAME=$(get_name $GIT_COMMITTER_NAME) && GIT_AUTHOR_EMAIL=$(get_email $GIT_COMMITTER_NAME) && GIT_COMMITTER_NAME=$GIT_AUTHOR_NAME && GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL && export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL && export GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL ' -- --all
Я нашел представленные версии агрессивным способом, особенно если вы фиксируете патчи от других разработчиков, это по существу украдет их код.
версия ниже работает на всех ветвях и изменяет автора и комиттера отдельно, чтобы предотвратить это.
престижность leif81 для опции все.
#!/bin/bash git filter-branch --env-filter ' if [ "$GIT_AUTHOR_NAME" = "<old author>" ]; then GIT_AUTHOR_NAME="<new author>"; GIT_AUTHOR_EMAIL="<youmail@somehost.ext>"; fi if [ "$GIT_COMMITTER_NAME" = "<old committer>" ]; then GIT_COMMITTER_NAME="<new commiter>"; GIT_COMMITTER_EMAIL="<youmail@somehost.ext>"; fi ' -- --all
изменить коммит
author name & email
byAmend
, затем заменитьold-commit with new-one
:$ git checkout <commit-hash> # checkout to the commit need to modify $ git commit --amend --author "name <author@email.com>" # change the author name and email $ git replace <old-commit-hash> <new-commit-hash> # replace the old commit by new one $ git filter-branch -- --all # rewrite all futures commits based on the replacement $ git replace -d <old-commit-hash> # remove the replacement for cleanliness $ git push -f origin HEAD # force push
другой способ
Rebasing
:$ git rebase -i <good-commit-hash> # back to last good commit # Editor would open, replace 'pick' with 'edit' before the commit want to change author $ git commit --amend --author="author name <author@email.com>" # change the author name & email # Save changes and exit the editor $ git rebase --continue # finish the rebase
Я должен отметить, что если единственная проблема заключается в том, что автор/электронная почта отличается от вашего обычного, это не проблема. Правильное решение-создать файл с именем
.mailmap
в основании каталога со строками типаName you want <email you want> Name you don't want <email you don't want>
и с тех пор, как команды
git shortlog
будет считать эти два имени одинаковыми (если вы специально не скажете им не делать этого). Смотрите http://schacon.github.com/git/git-shortlog.html Подробнее информация.это имеет преимущество всех других решений здесь в том, что вам не нужно переписывать историю, что может вызвать проблемы, если у вас есть восходящий поток, и всегда является хорошим способом случайно потерять данные.
конечно, если вы совершили что-то как себя, и это действительно должен быть кто-то другой, и вы не возражаете переписать историю на данный момент, изменение автора фиксации, вероятно, является хорошей идеей для целей атрибуции (в этом случае я направляю вас к моему другой ответ здесь).
если вы единственный пользователь этого репозитория, вы можете переписать историю используя
git filter-branch
(как svick писал), илиgit fast-export
/git fast-import
плюс скрипт фильтра (как описано в статье, на которую ссылается в docgnome ответ), или интерактивные rebase. Но любой из них изменит изменения с первого измененного коммита; это означает проблемы для любого, кто основывал его / ее изменения в вашей ветке предварительно переписать.восстановление
если бы другие разработчики не основывали свою работу на предварительной версии перезаписи, самым простым решением было бы повторно клонировать (клонировать снова).
в качестве альтернативы они могут попробовать
git rebase --pull
, который будет перемотан вперед, если в их репозитории не было никаких изменений, или перебазировать их ветвь поверх перезаписанных коммитов (мы хотим избежать слияния, так как он будет сохранять предварительно переписанные коммиты навсегда). Все это при условии, что они не имеют не поручено работать; используйтеgit stash
, чтобы спрятать изменения в противном случае.если другие разработчики используют функциональные ветви, и / или
git pull --rebase
не работает, например, потому что upstream не настроен, они должны rebase их работа поверх коммитов после перезаписи. Например, сразу после получения новых изменений (git fetch
), наmaster
ветвь на основе / раздвоенная отorigin/master
нужно беги$ git rebase --onto origin/master origin/master@{1} master
здесь
origin/master@{1}
состояние предварительной перезаписи (перед выборкой), см. gitrevisions.
альтернативным решением было бы использовать refs / replace/ механизм, доступный в Git с версии 1.6.5. В этом решении вы предоставляете замены для коммитов, которые имеют неправильную электронную почту; затем любой, кто выбирает "заменить" ссылки (что-то вроде
fetch = +refs/replace/*:refs/replace/*
refspec в соответствующем месте в их.git/config
) будет Вам замены прозрачно, и те, кто не получает эти ссылки, увидят старые коммиты.процедура проходит примерно так:
найти все коммиты с неправильной электронной почтой, например, с помощью
$ git log --author=user@wrong.email --all
для каждого неправильного коммита создайте коммит замены и добавьте его в базу данных объектов
$ git cat-file -p <ID of wrong commit> | sed -e 's/user@wrong\.email/user@example.com/g' > tmp.txt $ git hash-object -t commit -w tmp.txt <ID of corrected commit>
теперь, когда вы исправили фиксацию в базе данных объектов, вы должны сказать git автоматически и прозрачно замените неправильную фиксацию исправленной с помощью
git replace
:$ git replace <ID of wrong commit> <ID of corrected commit>
наконец, перечислите все замены, чтобы проверить, если эта процедура прошла успешно
$ git replace -l
и проверить, если замены происходят
$ git log --author=user@wrong.email --all
вы можете, конечно, автоматизировать эту процедуру... ну, все, кроме использования
git replace
который не имеет (пока) пакетного режима, поэтому вам придется использовать цикл оболочки для что, либо заменить "вручную".НЕ ПРОВЕРЕНО! YMMV.
обратите внимание, что вы можете столкнуться с некоторыми грубыми углами при использовании
refs/replace/
механизм: он новый, и еще не очень хорошо протестированы.
Если коммиты, которые вы хотите исправить, являются последними, и только несколько из них, вы можете использовать комбинацию
git reset
иgit stash
чтобы вернуться к фиксации их снова после настройки правильного имени и электронной почты.последовательность будет примерно такой (для 2 неправильных коммитов, без ожидающих изменений):
git config user.name <good name> git config user.email <good email> git reset HEAD^ git stash git reset HEAD^ git commit -a git stash pop git commit -a
Если вы используете Eclipse с EGit, то есть довольно простое решение.
Предположение: у вас есть коммиты в локальной ветви "local_master_user_x", которые не могут быть переданы в удаленную ветвь "master" из-за недопустимого пользователя.
- проверка удаленной ветви "мастер"
- выберите проекты / папки / файлы, для которых' local_master_user_x ' содержит изменения
- щелкните правой кнопкой мыши-заменить на-ветвь - 'local_master_user_x'
- зафиксируйте эти изменения снова, на этот раз как правильный пользователь и в локальную ветку 'master'
- Push to remote 'master'
используя интерактивную перебазировку, вы можете разместить команду amend после каждой фиксации, которую вы хотите изменить. Например:
pick a07cb86 Project tile template with full details and styling x git commit --amend --reset-author -Chead
обратите внимание, что Git хранит два разные адреса электронной почты, один для коммиттер (человек, который совершил изменение) и еще один для автор (человек, который написал смену).
информация коммиттер не отображается в большинстве мест, но вы можете увидеть его с
git log -1 --format=%cn,%ce
(или использоватьshow
вместоlog
для указания конкретной фиксации).при изменении автора вашего последнего коммита так же просто, как
git commit --amend --author "Author Name <email@example.com>"
есть один-лайнер нет или аргумент, чтобы сделать то же самое с информацией коммиттер.решение состоит в том, чтобы (временно или нет) изменить информацию о пользователе, а затем изменить фиксацию, которая обновит фиксатор до текущей информации:
git config user.email my_other_email@example.com git commit --amend
сегодня мы столкнулись с проблемой, когда символ UTF8 в имени автора вызывал проблемы на сервере сборки, поэтому нам пришлось переписать историю, чтобы исправить это. Были предприняты следующие шаги:
Шаг 1: измените свое имя пользователя в git для всех будущих коммитов, согласно инструкциям здесь: https://help.github.com/articles/setting-your-username-in-git/
Шаг 2: Запустите следующий скрипт bash:
#!/bin/sh REPO_URL=ssh://path/to/your.git REPO_DIR=rewrite.tmp # Clone the repository git clone ${REPO_URL} ${REPO_DIR} # Change to the cloned repository cd ${REPO_DIR} # Checkout all the remote branches as local tracking branches git branch --list -r origin/* | cut -c10- | xargs -n1 git checkout # Rewrite the history, use a system that will preseve the eol (or lack of in commit messages) - preferably Linux not OSX git filter-branch --env-filter ' OLD_EMAIL="me@something.com" CORRECT_NAME="New Me" if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ] then export GIT_COMMITTER_NAME="$CORRECT_NAME" fi if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ] then export GIT_AUTHOR_NAME="$CORRECT_NAME" fi ' --tag-name-filter cat -- --branches --tags # Force push the rewritten branches + tags to the remote git push -f # Remove all knowledge that we did something rm -rf ${REPO_DIR} # Tell your colleagues to `git pull --rebase` on all their local remote tracking branches
быстрый обзор: проверка вашего репозиторий во временный файл, проверьте все удаленные ветви, запустите скрипт, который перепишет историю, сделайте принудительный толчок нового состояния и скажите всем своим коллегам сделать перебазирование, чтобы получить изменения.
У нас были проблемы с запуском этого на OS X, потому что он каким-то образом испортил окончание строки в сообщениях о фиксации, поэтому нам пришлось повторно запустить его на машине Linux после этого.
ваша проблема очень распространенная. Смотрите "использование Mailmap для исправления списка авторов в Git"
для простоты, я создал скрипт, чтобы облегчить процесс: git-changemail
после размещения этого скрипта на вашем пути, вы можете выдавать команды, такие как:
изменить автор совпадения на текущей ветке
$ git changemail -a old@email.com -n newname -m new@email.com
изменить совпадения автора и коммиттера на
и . Пас -f
to filter-branch чтобы разрешить перезапись резервных копий$ git changemail -b old@email.com -n newname -m new@email.com -- -f <branch> <branch2>
показать существующих пользователей на репо
$ git changemail --show-both
кстати, после внесения изменений очистите резервную копию из ветви фильтра с помощью: git-backup-clean
Если вы единственный пользователь этого РЕПО или вы не заботитесь о возможном нарушении РЕПО для других пользователей, то да. Если вы нажали эти коммиты, и они существуют там, где где-то еще можно получить к ним доступ, то нет, если вы не заботитесь о взломе РЕПО других людей. Проблема в том, что, изменяя эти коммиты, вы будете генерировать новые SHAs, которые заставят их рассматриваться как разные коммиты. Когда кто-то еще пытается вытащить эти измененные коммиты, история отличается и бум.
эта страница http://inputvalidation.blogspot.com/2008/08/how-to-change-git-commit-author.html описывает, как это сделать. (Я не пробовал это так YMMV)
Я тоже хочу добавить свой пример. Я хочу создать bash_function с заданным параметром.
это работает в mint-linux-17.3
# => email to change, => new_name, => new E-Mail function git_change_user_config_for_commit { # defaults WRONG_EMAIL=${1:-"you_wrong_mail@hello.world"} NEW_NAME=${2:-"your name"} NEW_EMAIL=${3:-"new_mail@hello.world"} git filter-branch -f --env-filter " if [ $GIT_COMMITTER_EMAIL = '$WRONG_EMAIL' ]; then export GIT_COMMITTER_NAME='$NEW_NAME' export GIT_COMMITTER_EMAIL='$NEW_EMAIL' fi if [ $GIT_AUTHOR_EMAIL = '$WRONG_EMAIL' ]; then export GIT_AUTHOR_NAME='$NEW_NAME' export GIT_AUTHOR_EMAIL='$NEW_EMAIL' fi " --tag-name-filter cat -- --branches --tags; }
git rebase -i YOUR_FIRTS_COMMIT_SHA^ while true; do git commit --amend --author="Name Surname <email@example.com>" --no-edit && git rebase --continue; done
нажмите ^C # после завершения перебазирования (цикл будет продолжать обновлять последнюю фиксацию)
попробуйте это. Он будет делать то же, что и выше, но в интерактивном режиме.
bash <(curl -s https://raw.githubusercontent.com/majdarbash/git-author-change-script/master/run.sh)
Ссылка:https://github.com/majdarbash/git-author-change-script
Это не ответ на ваш вопрос, а сценарий вы можете использовать, чтобы избежать этого в будущем. Он использует глобальные крючки, доступные с Git версия 2.9 чтобы проверить конфигурацию электронной почты на основе каталога ваш в:
#!/bin/sh PWD=`pwd` if [[ $PWD == *"Ippon"* ]] # 1) then EMAIL=$(git config user.email) if [[ $EMAIL == *"Work"* ]] # 2) then echo ""; else echo "Email not configured to your Work email in the Work directory."; git config user.email "youremail@youremail.com" echo "Git email configuration has now been changed to \"$(git config user$ echo "\nPlease run your command again..." echo '' exit 1 fi; elif [[ $PWD == *"Personal"* ]] then EMAIL=$(git config user.email) if [[ $EMAIL == "youremail@youremail.com" ]] then echo ""; else echo "Email is not configured to your personal account in the Personal di$ git config user.email "youremail@youremail.com" echo "Git email configuration has now been changed to \"$(git config user$ echo "\nPlease run your command again..." echo '' exit 1; fi; fi;
он проверяет ваш текущий рабочий каталог, а затем проверяет, что ваш git настроен на правильную электронную почту. Если нет, он изменяет его автоматически. Смотрите полную информацию здесь.