Force-push, 단 lease 와 함께
History rewrite 동작 후 — push 된 commit amend, interactive rebase, push 된 commit drop / squash — local branch 와 remote branch 가 '같은' 작업의 다른 history 를 보유. Plain git push 는 거부됨, Git 이 서버 history 덮어쓰기 거부. Rewrite 완료하려면 force-push 필요. Plain --force 는 틀린 도구. --force-with-lease 가 맞아.
차이가 중요. Plain git push --force 는 remote tip 을 local tip 으로 무조건 덮어써. 동료가 네가 안 받은 commit push 했으면 네 force-push 가 그들 commit 을 서버에서 지움. git push --force-with-lease 는 체크 포함: 마지막 fetch 시점의 remote tip 을 기억, 그 후 remote tip 이 움직였으면 push 거부. 평소 똑같은 편의, 동시 작업 손실 위험 시 즉시 거부.
새로운 --force-with-lease=<branch>:<sha> 형태는 정확히 어느 remote SHA 기대하는지 명시 — script 에 유용. Git 2.30+ 가 --force-if-includes 추가 안전 더해: local branch 가 덮어쓸 remote tip 에 base 했는지 확인, auto-fetch 세팅에서 --force-with-lease 단독으로는 놓치는 'fetch 잊음' 케이스 잡아. 완전 안전하게 둘 다: git push --force-with-lease --force-if-includes.
재앙 막는 규율: 절대 git push --force 안 침. 실패하게 alias. git config --global alias.pushf 'push --force-with-lease --force-if-includes' 로 git pushf 안전 단축, muscle memory 가 옮겨. Plain --force 는 진짜 알고 하는 드문 script 케이스용으로 남지만 더는 default 반사 아니라, 오타 사고 비용이 0 근처로.