C.W.K.
Stream
Lesson 05 of 05 · published

force push는 lease와 함께

~18 min · push, force-with-lease

Level 0Untracked 새싹
0 XP0/47 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

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 근처로.

Code

Default 로 안전한 force-push·bash
# Push 된 commit 의 local rebase 또는 amend 후:
git push --force-with-lease --force-if-includes

# --force-with-lease 체크:
#   Remote tip 이 마지막 fetch 시점 그대로여야 함.
#   동료가 동시에 push 했으면 거부.

# --force-if-includes 가 더하는 것:
#   Local branch 가 덮어쓸 remote tip 에 base 했는지 확인 —
#   'fetch 잊음' 케이스 잡음.

# 추천 alias:
git config --global alias.pushf 'push --force-with-lease --force-if-includes'
git pushf
Force-push 사고에서 회복·bash
# 동료가 force-push 해서 네 작업 덮어씀?
# 그들 reflog 에 네 tip 있을 수도. 또는 네 거 사용:

git reflog                       # pre-force-push tip 찾기
git reset --hard HEAD@{N}        # local 복원

# 그 다음:
git push --force-with-lease      # 재게시 (조율 후!)
# 또는:
git switch -c rescue HEAD@{N}    # 별도 branch 로 저장
git push -u origin rescue

External links

Exercise

개인 branch 에 commit 두 개 push, git rebase -i 로 하나로 squash, plain git push 시도해서 거부 메시지 읽어. git push --force-with-lease 로 다시 push + 성공 확인. 레슨의 pushf alias 추가. 이 연습 + 향후 모든 작업에서 git push --force 대신 git pushf. Muscle memory 차이 적어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.