Я сделал серию коммитов в Git, и теперь я понимаю, что забыл правильно указать свое имя пользователя и свойства электронной почты пользователя (новый компьютер). Я еще не отправил эти коммиты в свой репозиторий, так как я могу исправить эти коммиты до того, как я это сделаю (только 3 последних коммита в основной ветке)?
Я смотрел на git reset
и git commit -C <id> --reset-author
, но я не думаю, что я на правильном пути.
git
git-commit
git-rewrite-history
pauldoo
источник
источник
remote: error: GH007: Your push would publish a private email address.
... `! [удалено отклонено] master -> master (push отклонено из-за ограничений конфиденциальности электронной почты) `.Ответы:
Перебазировать / изменить кажется неэффективным, когда у вас под рукой есть сила ответвления фильтра:
(разделить на несколько строк для ясности, но не обязательно)
Не забудьте проверить результат, когда закончите, чтобы убедиться, что вы не изменили ничего, что не хотели!
источник
git filter-branch --help
довольно прост :)--tag-name-filter cat
дляfilter-branch
того, чтобы перенести теги в новую историю.--branches --tags
Вместо этого он также использует--all
, который переписывает только историю ветвей и тегов и оставляет других вrefs
покое (хотя это, вероятно, не имеет большого значения, если, например, вы не используетеgit-notes
)-- --all
HEAD~1..HEAD
git log HEAD~2..HEAD
?Интерактивный подход к перебазированию довольно хорош, когда используется в сочетании с exec. Вы можете запустить любую команду оболочки для определенного коммита или всех коммитов в ребазе.
Сначала установите ваши настройки git author
Затем сбросить автора для всех коммитов после данного SHA
Откроется ваш редактор, чтобы подтвердить изменения. Все, что вам нужно сделать, это сохранить и выйти, и он будет проходить каждый коммит и запускать команду, указанную в флаге -x.
Согласно приведенному ниже комментарию @ Dave, вы также можете сменить автора, сохранив при этом оригинальные временные метки:
источник
filter-branch
если вы просто хотите исправить свои последние коммиты :). Тем не менее, обратите внимание, что это изменяет временную метку коммитов.git rebase -i YOUR_SHA -x "git commit --amend --author 'New Name <new_address@example.com>' -CHEAD"
git log
также показывал для меня старое авторство, но git status правильно идентифицировал новые коммиты, и после принудительного нажатия они были, как я и предполагал.git rebase -i --root …
вместо передачи SHA.Чтобы изменить автора только для последнего коммита:
Предположим, вы хотите изменить автора только для последних N коммитов:
НОТЫ
--no-edit
флаг убеждаетсяgit commit --amend
не требует дополнительного подтвержденияgit rebase -i
, вы можете вручную выбрать коммиты, где сменить автора,файл, который вы редактируете, будет выглядеть так:
источник
--rebase-merges
(короткий-r
) параметр, чтобы сохранить топологию вашей ветви нетронутой, если она содержит некоторые слияния.Этот метод был задокументирован github для этой цели. Шаги:
OLD_EMAIL
,CORRECT_EMAIL
иCORRECT_NAME
)git push --force --tags origin 'refs/heads/*'
и все готово!источник
Я считаю, что вы ищете
git rebase --interactive
Это позволяет вам выполнить сброс до определенного коммита, а затем перейти к изменению истории добавления или группировки коммитов.
Здесь у вас есть объяснение https://web.archive.org/web/20100213104931/http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase -interactive
источник
Если вы чувствуете себя неуверенно по поводу унижения и исправления, вы можете сделать это таким образом. В то же время вы также устанавливаете глобальный конфиг, который вы, вероятно, намереваетесь сделать в любом случае.
git reset HEAD~
(отменить последний коммит)git config --global user.name "Your Name"
git config --global user.email you@example.com
git commit -m "message"
источник