TL; DR
git commit -v --amend
git push -f
Это позволит вам отредактировать последнее сообщение о коммите и заменить коммит на пульте вашими правками.
ОДНАКО
Скорее всего, вам лучше просто внести исправление.
Единственный способ изменить существующий коммит:
git add changed # example, add changed to the commit
git commit -v --amend # launch editor, edit commit message
Это позволит вам легко редактировать ваш последний коммит (либо содержимое, либо сообщение о коммите)
Затем вы обнаружите, что не можете нажать на пульт, когда вы попытаетесь, он будет отклонен с таким предупреждением:
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:xxx/xxx.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
Что дает вам два варианта:
- Сначала потяните, прежде чем снова нажать
- Force-push (
git push -f
)
Если вы сначала потянете - вы поместите неотредактированный коммит обратно в свою историю, он все еще будет существовать, но у вас не будет проблем с отправкой в удаленную ветку. Оригинальный коммит будет отображаться в истории как слияние.
Если вы нажмете принудительно, вы буквально заставите удаленную ветвь принять вашу локальную историю и перезаписать историю удаленной ветки.
Примечание из собственной справки git, возможно, лучше всего использовать для описания того, почему форсирование пуша вообще плохая идея:
Обычно команда отказывается обновлять удаленную ссылку, которая не является предком локальной ссылки, используемой для ее перезаписи. Этот флаг отключает проверку. Это может привести к потере коммитов удаленным репозиторием ; используйте это с осторожностью.
В контексте «потерянные коммиты» будут старой версией коммита, который вы отредактировали, но могут также включать изменения, которые коллега помещает между вашим первым и принудительным толчком. По этой причине это рискованный маневр.
Если вам это нужно, это может быть сделано - но либо действуйте быстро (чтобы никто не скачивал borked-commit), либо знайте, что у любого другого разработчика возникнут проблемы, связанные с переходом в эту ветку.