Я хочу сменить автора одного конкретного коммита в истории. Это не последний коммит.
Я знаю об этом вопросе - Как мне изменить автора коммита в git?
Но я думаю о чем-то, где я идентифицирую коммит по хешу или короткому хешу.
git
git-commit
MicTech
источник
источник
Ответы:
Интерактивная перебазировка с точки ранее в истории, чем коммит, который нужно изменить (
git rebase -i <earliercommit>
). В список коммитов время нормированный, изменить текст отpick
кedit
рядом с хэш , который вы хотите изменить. Затем, когда git предложит вам изменить коммит, используйте это:Например, если ваша история коммитов
A-B-C-D-E-F
сF
asHEAD
, и вы хотите сменить автораC
иD
, то вы бы ...git rebase -i B
( вот пример того, что вы увидите после выполненияgit rebase -i B
команды )A
, используйтеgit rebase -i --root
C
иD
сpick
наedit
:wq
).C
git commit --amend --author="Author Name <email@address.com>"
git rebase --continue
D
git commit --amend --author="Author Name <email@address.com>"
сноваgit rebase --continue
git push -f
чтобы обновить свое происхождение с обновленными коммитами.источник
git rebase -i <commit>
vim
. Чтобы сохранить и выйти, введите Esc: wq Enter. С другой стороны, если это Nano, и вы видите такие вещи, как «WriteOut: ^ O» внизу, тогда вам следует использовать Ctrl + O, Enter, Ctrl + X.--no-edit
опцию.git commit --amend --reset-author --no-edit
не открывается редактор Доступно с git 1.7.9.git rebase -i --root
Общепринятый ответ на этот вопрос удивительно умное использование интерактивных перебазироваться, но , к сожалению , демонстрирует конфликты , если совершить мы пытаемся изменить автор раньше на ветке , который впоследствии слились в. В более общем плане , она не работает при обработке грязных историй.
Поскольку я опасаюсь запуска скриптов, которые зависят от установки и сброса переменных среды для перезаписи истории git, я пишу новый ответ на основе этого поста, который похож на этот ответ, но является более полным.
Следующее проверено и работает, в отличие от связанного ответа. Предположим для ясности изложения, что
03f482d6
это коммит, автора которого мы пытаемся заменить, и42627abe
коммит с новым автором.Оформите коммит, который мы пытаемся изменить.
Заставьте автора изменить.
Теперь у нас есть новый коммит с хэшем
42627abe
.Оформить заказ оригинальной ветке.
Замените старый коммит на новый локально.
Переписать все будущие коммиты на основе замены.
Удалите замену для чистоты.
Нажмите на новую историю (используйте --force только в том случае, если приведенный ниже сбой, и только после проверки работоспособности с помощью
git log
и / илиgit diff
).Вместо 4-6 вы можете просто перейти на новый коммит:
источник
git rebase -i
. Никогда не слышал об этомgit replace
раньше. +1--force-with-lease
вместо-f
. Это безопаснее.git filter-branch -- --all
во всех ветвях, в которых находился исходный коммит , происходит изменение коммитов. Если у вас недостаточно учетных данных (или вы просто не хотите изменять историю веток других пользователей), хорошо быть осторожным с этим ответом.Документация Github содержит скрипт, который заменяет информацию о коммитере для всех коммитов в ветке .
Запустите следующий скрипт из терминала после изменения значений переменных
Нажмите исправленную историю на GitHub:
ИЛИ, если вы хотите нажать выбранные ссылки на ветви, используйте
источник
clone
/push
, вы получите резервное пространство именrefs/original/
. Я не мог найти способ интеллектуального удаления этого пространства имен, поэтому я в итоге удалил каталог.git/refs/original
, который сработал.git push -f
будет принудительно принудительно изменить репо.Сбросьте ваш адрес электронной почты в конфигурации:
git config --global user.email example@email.com
Теперь сбросьте автора вашего коммита без необходимости редактирования:
git commit --amend --reset-author --no-edit
источник
It's not last commit.
Так как ониamend
это сделали ?git reset HEAD~
предложенные строки, а затем снова сделал следующий коммит вручную. Сработало нормально!git config --local user.name FirstName LastName
иgit config --local user.email first.last@example.com
. Затем примените к последним шести коммитам, используяgit rebase --onto HEAD~6 --exec "git commit --amend --reset-author --no-edit" HEAD~6
. Наконец, нажмите его для удаленного использования Git-репоgit push --force-with-lease
.Вы можете изменить автора последнего коммита, используя команду ниже.
git commit --amend --author="Author Name <email@address.com>"
Однако, если вы хотите изменить более одного коммита, имя автора немного сложнее. Вам нужно начать интерактивную перебазировку, затем пометить коммиты как правки, затем изменить их один за другим и закончить.
Начать ребазинг с
git rebase -i
. Это покажет вам что-то вроде этого.Измените
pick
ключевое словоedit
на коммиты, которые вы хотите изменить имя автора.Затем закройте редактор. Для начинающих нажмите,
Escape
затем напечатайте:wq
и нажмитеEnter
.Тогда вы увидите свой терминал, как будто ничего не случилось. На самом деле вы находитесь в середине интерактивной перебазировки. Теперь пришло время изменить имя автора вашего коммита, используя команду выше. Он снова откроет редактор. Выйдите и продолжите ребаз с
git rebase --continue
. Повторите то же самое для количества коммитов, которое вы хотите отредактировать. Вы можете убедиться, что интерактивное обновление завершено, когда вы получитеNo rebase in progress?
сообщение.источник
pick
действие и добавлять после каждой строкиexec git commit --no-edit --amend --author="MyNewAuthor <my@new-auth.or>"
Ответы в вопросе, на который вы ссылались, являются хорошими ответами и охватывают вашу ситуацию (другой вопрос носит более общий характер, поскольку включает переписывание нескольких коммитов).
В качестве предлога, чтобы попробовать
git filter-branch
, я написал скрипт для перезаписи имени автора и / или автора сообщения для данного коммита:источник
Зафиксировать перед:
Чтобы исправить автора для всех коммитов, вы можете применить команду из ответа @ Amber:
Или, чтобы повторно использовать свое имя и адрес электронной почты, вы можете просто написать:
Фиксация после команды:
Например, чтобы изменить все, начиная с
4025621
:Ты должен бежать:
Примечание. Чтобы включить автора, содержащего пробелы, такие как имя и адрес электронной почты, автор должен быть заключен в кавычки. Например:
или добавьте этот псевдоним в
~/.gitconfig
:А затем запустите:
источник
git shortlog -e -s
.Есть еще один шаг к ответу Амбер, если вы используете централизованное хранилище:
git push -f
форсировать обновление центрального репозитория.Будьте осторожны, чтобы над одной веткой работало не так много людей, потому что это может нарушить последовательность.
источник
При этом в документе
git rebase -i
есть интересная информация:A-B-C-D-E-F
,B
иD
(= 2 коммиты),тогда вы можете сделать:
git config user.name "Correct new name"
git config user.email "correct@new.email"
git commit --allow-empty -m "empty"
git rebase -i B^
B^
выбирает родителяB
.pick
, чтобыsquash
для них.Пример чего
git rebase -i B^
даст вам:изменить это на:
Он предложит вам отредактировать сообщения:
и вы можете просто удалить первые несколько строк.
источник
В поддержку ответа Евгения Конкова , чтобы начать с корневого коммита, используйте
--root
флаг.--no-edit
Флаг полезно тожеисточник
Найти способ, который может быстро изменить пользователя и не имеет побочных эффектов для других коммитов.
Простой и понятный способ:
подробные операции
refs/heads/master.
источник
Если коммит, который вы хотите изменить, не является последним коммитом, выполните следующие шаги. Если ваш коммит находится в другой ветке, то сначала переключитесь на эту ветку.
git checkout branch_name
Найдите коммит перед коммитом, который вы хотите изменить, и найдите его хеш. Затем выполните команду rebase.
git rebase -i -p хэш коммита
Затем откроется редактор и введите «edit» для коммитов, которые вы хотите изменить. Оставьте других с опцией «выбрать» по умолчанию. После изменения введите клавишу «esc» и wq! выходить.
Затем выполните команду git commit с возможностью изменения.
git commit --amend --author = "Имя пользователя электронной почты" --no-edit
Затем выполните следующую команду.
git rebase - продолжение
Как только автор коммитов обновится в локальном репозитории, отправьте изменения в удаленный репозиторий.
источник
Существует также ленивый подход к этой проблеме, особенно если у вас есть несколько коммитов, которые вы хотите изменить. В моем случае у меня была новая ветка с несколькими коммитами с неправильным автором, так что мне помогло:
Перейдите в исходную ветку:
Создайте из него новую ветку:
Объединить его без информации о коммите как один коммит:
Вы также можете внести изменения:
Измените имя автора и передайте изменения:
И это все, вы можете подтолкнуть изменения.
После этого вы можете удалить ветку с неправильным автором.
источник
Шаги, чтобы переименовать имя автора после нажатия коммита
git rebase i HEAD ~ 10 (10 - общий коммит, отображаемый при rebase)
If you Get anything like below
fatal: It seems that there is already a rebase-merge directory, and I wonder if you are in the middle of another rebase. If that is the case, please try
git rebase (--continue | --abort | --skip)
If that is not the case, please rm -fr ".git/rebase-merge" and run me again. I am stopping in case you still have something valuable there.
Затем введите «git rebase --continue» или «git rebase --abort» в соответствии с вашими потребностями
pick 897fe9e simplify code a little
pick abb60f9 add new feature
pick dc18f70 bugfix
Теперь вам нужно добавить команду ниже под коммитом, который вы хотите редактировать, как показано ниже
pick 897fe9e simplify code a little exec git commit --amend --author 'Author Name <author.name@mail.com>' pick abb60f9 add new feature exec git commit --amend --author 'Author Name <author.name@mail.com>' pick dc18f70 bugfix exec git commit --amend --author 'Author Name <author.name@mail.com>'
Вот и все, теперь просто нажмите ESC: wq и все готово
Затем git push origin HEAD: ИМЯ ФИЛИАЛА -f [пожалуйста, позаботьтесь о -f Force push]
как
git push -f
илиgit push origin HEAD: dev -f
источник
git push
команды?Изменение имени коммиттера и адреса электронной почты в глобальном масштабе:
Изменение имени и адреса коммиттера для каждого репозитория:
Изменение информации об авторе только для следующего коммита:
Подсказка : для другой ситуации и получения дополнительной информации прочитайте ссылку на пост .
источник
Если вам нужно изменить коммит AUTHOR OF THE LAST и никто другой не использует ваш репозиторий, вы можете отменить свой последний коммит с помощью:
измените имя автора вашего коммита с помощью:
Выйдите из редактора, который открывается, и снова нажмите ваш код:
источник
Для сообщения коммита слияния я обнаружил, что не могу изменить его, используя
rebase
, по крайней мере, gitlab. Он показывает слияние как коммит, но я не могу переназначить его на #sha. Я нашел этот пост полезным.Эти три строки кода сделали работу по изменению сообщения фиксации слияния (как автор).
источник
Вы можете использовать эти команды с официальной страницы GitHub
https://help.github.com/en/github/using-git/changing-author-info
вот команды
Здесь вы можете изменить старую электронную почту на новое имя пользователя и адрес электронной почты.
источник