Когда я начал использовать git, я просто сделал git init
и начал звонить add
и commit
. Теперь я начинаю обращать внимание и вижу, что мои коммиты отображаются как cowens@localmachine
, а не как адрес, который я хочу. Похоже, что настройка GIT_AUTHOR_EMAIL
и GIT_COMMITTER_EMAIL
будет делать то, что я хочу, но у меня все еще есть те старые коммиты с неправильным адресом электронной почты / именем. Как я могу исправить старые коммиты?
76
git
в подобных целях лучше задать на Stack Overflow .Ответы:
Вы можете вернуться и исправить все свои коммиты одним вызовом git filter-branch. Это имеет тот же эффект, что и rebase, но вам нужно сделать одну команду, чтобы исправить всю историю, вместо того, чтобы фиксировать каждый коммит по отдельности.
Вы можете исправить все неправильные письма с помощью этой команды:
Более подробная информация доступна в Git Docs
источник
if [ "$GIT_AUTHOR_EMAIL" = "$oldemail" ]; then GIT_AUTHOR_EMAIL="$newemail"; fi
Команда Git filter-branch является мощной, но ее ужасно громоздко использовать для чего-то нетривиального, например, если у вас есть несколько авторов для исправления.
Вот альтернатива, которую я нашел полезной, которая использует функцию .mailmap, описанную на странице руководства git-shortlog. Это обеспечивает механизм отображения автора, который мы можем использовать с возможностью форматирования git log. Мы можем использовать его для генерации команд для выбора и изменения именованной последовательности коммитов.
Например, предположим, что вы хотите исправить авторство в ветке $ BRANCH, начиная с коммита $ START.
Вам нужно создать файл .mailmap в верхнем каталоге вашего репозитория, который сопоставляет существующие имена авторов с правильными. Вы можете получить список существующих имен авторов:
Вам нужно получить файл .mailmap, например, такой:
Теперь вы можете использовать функцию форматирования git log для генерации команд для перезаписи $ BRANCH как $ BRANCH2.
Первая команда создает новую пустую ветвь, возникающую из коммита $ START. Для каждого коммита от $ START до конца $ BRANCH вторая команда cherry выбирает исходный коммит в конце текущей ветки $ BRANCH2 и корректирует его, чтобы правильно установить автора.
Это также обычно применимо - поместите это в ваш ~ / .gitconfig:
Поэтому, когда вам нужно исправить авторов, теперь вам просто нужно сгенерировать .mapfile и сделать:
Исходную ветку ref можно переназначить новой, а новую удалить:
источник
Объединение ответа из Как исправить метаинформацию при первом коммите в git?
источник
Чтобы следовать ответу Джедберга: Вы можете использовать
rebase -i
и выбрать для редактирования коммитов, о которых идет речь. Если вы используете,git commit --amend --author <AUTHOR DETAILS>
а затемgit rebase continue
вы можете пройти и исправить историю.источник