Menu
Coddy logo textTech

Git Force Push

Последнее обновление

Обычный git push отклоняется, когда ваша локальная ветка разошлась с удалённой - Git не станет перезаписывать коммиты, которых вы могли не видеть. Force push обходит эту проверку и приводит удалённую ветку в соответствие с локальной. Он нужен после переписывания истории (rebase или amend), но может стереть чужие коммиты, поэтому выбирайте более безопасный --force-with-lease.

Попробуйте это в терминальном playground - настоящая оболочка в вашем браузере, ничего устанавливать не нужно.

Force push приводит удалённую ветку в соответствие с вашей переписанной локальной историей - разошедшийся коммит на удалённой стороне отбрасывается.

Синтаксис

CommandWhat 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 также пошагово разбирает работу с удалёнными репозиториями.
Coddy programming languages illustration

Изучайте Git с Coddy

НАЧАТЬ