
git push --force(또는--force-with-lease) 명령어는 히스토리를
강제로 덮어씌우는 강력한 도구
이 옵션의 핵심은 누구의 방해도 받지 않는 개인 작업 공간 에서만 안전하게
사용되어야 한다.
Force Push 는
feat/users와 같은 본인 개인 작업 브랜치에서는
git push origin feat/users --force-with-lease를 사용하는 것이 안전하고 권장되는 방법이다.
이 브랜치는 본인 외에는 아무도 직접 Push 하거나 기반으로 삼고
작업하지 않기 때문에, 히스토리를 변경해도 다른 팀원의 작업에 피해를 주지
않기 때문이다.
git push --force가 가장 필요해지는 순간은 개인 작업 브랜치에서
깔끔한 Pull Request(PR) 준비를 위해 히스토리를 정리했을 때이다.
feat/users브랜치에서 작업 중이고,develop브랜치에 팀원의 최신 커밋이 반영되었을 때, 내 피처 브랜치를develop기반으로 최신화하는 과정
- 원격 최신 내용 가져오기
git fetch origin
develop위에 내 커밋 재배치 (Rebase 실행)# 현재 브랜치(feat/users)의 커밋들을 origin/develop의 최신 커밋 위로 재배치git rebase origin/develop
- 결과
# 로컬 feat/users 브랜치의 모든 커밋 해시가 변경되어, 원격 feat/users와 히스토리가 불일치하게 된다.
- 정리된 히스토리를 원격에 강제 덮어쓰기
# 일반 push는 실패하므로, 안전한 강제 옵션을 사용하여 새로운 히스토리를 원격에 반영한다.# (필수 권장) 안전한 강제 Push 실행git push origin feat/users --force-with-lease

git push -f를 사용하면 다른 팀원의 작업을 날릴 수 있지만,
--force-with-lease는 이를 방지하는 안전장치이다.
--force-with-lease의 기능 :
내가fetch한 이후 원격 브랜치에 새로운 커밋이 추가되지 않았을
경우에만 강제 덮어쓰기를 허용한다.
만약 다른 사람이 그 사이에 Push를 했다면, 명령은 실패하고 데이터
손실을 막는다.
따라서, 개인 작업 브랜치일지라도 습관적으로
-f대신--force-with-lease를 사용하는 것을 강력히 권장한다.