Git Force Push
마지막 업데이트
로컬 브랜치가 원격과 갈라지면 일반적인 git push는 거부됩니다 - Git은 당신이 보지 못했을 수 있는 커밋을 덮어쓰지 않기 때문입니다. force push는 그 검사를 무시하고 원격 브랜치를 로컬과 일치시킵니다. 히스토리를 재작성한 후(rebase나 amend)에 필요하지만, 다른 사람의 커밋을 지울 수 있으므로 더 안전한 --force-with-lease를 사용하세요.
이것들을 터미널 플레이그라운드에서 시도해 보세요 - 브라우저 안의 진짜 셸이며, 설치할 것이 없습니다.
문법
| 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를 갱신한 경우는 예외 |
| 팀에 권장 | 아니요 | 예 |
Git force push 자주 묻는 질문
언제 force push가 필요한가요?
이미 원격에 있는 히스토리를 재작성했을 때입니다 -
git rebase, git commit --amend, 또는 커밋을 스쿼시한 대화형 rebase 이후입니다. 로컬 브랜치가 더 이상 원격의 히스토리와 일치하지 않으므로 일반 푸시는 거부되고, force push만이 그것을 업데이트할 수 있습니다.--force와 --force-with-lease의 차이는 무엇인가요?
--force는 무조건 원격 브랜치를 덮어쓰므로, 마지막 fetch 이후 팀원이 푸시한 커밋을 조용히 삭제할 수 있습니다. --force-with-lease는 원격이 여전히 당신이 마지막으로 본 커밋에 있을 때만 덮어씁니다 - 그사이 다른 사람이 푸시했다면 거부하여 그들의 작업을 보호합니다. 한 가지 주의점: 어떤 fetch든(IDE의 백그라운드 자동 fetch 포함) lease를 갱신하므로, 원격을 확인한 직후에 푸시하세요. 그래도 공유 브랜치에서는 --force보다 이쪽을 쓰는 것이 좋습니다.force push는 위험한가요?
그럴 수 있습니다. 공유 브랜치에서 단순한
--force는 다른 사람이 푸시한 커밋을 덮어써서 사실상 그들의 작업을 원격에서 삭제할 수 있습니다. 당신만 사용하는 브랜치에서는 안전합니다. 확신이 서지 않으면 --force-with-lease를 사용하세요. 보지 못한 변경을 뭉개는 대신 안전하게 실패합니다.force push를 어떻게 되돌리나요?
이전 커밋이 아직 로컬이나
git reflog에 있다면, 브랜치를 그것으로 되돌린 다음 다시 force push하여 이전 상태를 복원할 수 있습니다. 이것이 --force-with-lease를 사용해야 할 또 하나의 이유입니다 - 애초에 실수로 덮어쓸 가능성을 훨씬 낮춰 줍니다.이것을 온라인에서 연습할 수 있나요?
네. 터미널 플레이그라운드를 열어 브라우저 안의 진짜 셸에서 git push 명령을 실행하세요 - 설치할 것이 없습니다. Coddy의 무료 대화형 Git 강좌도 원격 작업을 단계별로 다룹니다.