Git Force Push
Последнее обновление
Обычный git push отклоняется, когда ваша локальная ветка разошлась с удалённой - Git не станет перезаписывать коммиты, которых вы могли не видеть. Force push обходит эту проверку и приводит удалённую ветку в соответствие с локальной. Он нужен после переписывания истории (rebase или amend), но может стереть чужие коммиты, поэтому выбирайте более безопасный --force-with-lease.
Попробуйте это в терминальном playground - настоящая оболочка в вашем браузере, ничего устанавливать не нужно.
Синтаксис
| Command | What it does |
|---|---|
git push --force | Перезаписывает удалённую ветку без проверки безопасности |
git push -f | Краткая форма --force |
git push --force-with-lease | Форсирует, только если тем временем никто больше не пушил |
git push --force-with-lease origin feature | Более безопасный force push в именованную ветку |
--force vs --force-with-lease
| Behavior | --force | --force-with-lease |
|---|---|---|
| Перезаписывает удалённую ветку | Всегда | Только если не изменилась с вашего последнего fetch |
| Может стереть чужие коммиты | Да | Отказывается, если только fetch не обновил lease |
| Рекомендуется для команд | Нет | Да |
FAQ по git force push
Когда мне нужен force push?
Когда вы переписали историю, которая уже есть на удалённом репозитории - после
git rebase, git commit --amend или интерактивного rebase, объединившего коммиты. Ваша локальная ветка больше не совпадает с историей удалённой, поэтому обычный push отклоняется, и обновить её может только force push.В чём разница между --force и --force-with-lease?
--force перезаписывает удалённую ветку безусловно, из-за чего могут молча удалиться коммиты, которые коллега отправил после вашего последнего fetch. --force-with-lease перезаписывает только если удалённая ветка всё ещё на том коммите, который вы видели последним - если кто-то тем временем сделал push, команда отказывает и защищает его работу. Один нюанс: любой fetch (включая фоновый автоматический fetch вашей IDE) обновляет lease, поэтому пушьте сразу после того, как проверили удалённую ветку. Всё равно предпочитайте --force-with-lease вместо --force на любой общей ветке.Опасен ли force push?
Может быть. На общей ветке простой
--force может перезаписать коммиты, которые отправили другие, фактически удалив их работу из удалённого репозитория. На ветке, которой пользуетесь только вы, он безопасен. Если сомневаетесь, используйте --force-with-lease, который безопасно завершается с ошибкой, а не затирает невиданные изменения.Как отменить force push?
Если старые коммиты ещё есть у вас локально или в
git reflog, вы можете сбросить ветку обратно на них и снова сделать force push, чтобы восстановить прежнее состояние. Это ещё одна причина использовать --force-with-lease - он делает случайные перезаписи гораздо менее вероятными изначально.Можно ли попрактиковаться в этом онлайн?
Да. Откройте терминальный playground, чтобы выполнять команды git push в настоящей оболочке в браузере - ничего устанавливать не нужно. Бесплатный интерактивный курс по Git от Coddy также пошагово разбирает работу с удалёнными репозиториями.