본문 바로가기
git

[Git] Git에서 일부 폴더만 작업 후 push 했을 때 생기는 문제와 안전한 대처법

by clolee 2025. 4. 10.

git push -f의 동작 원리와 일부 폴더만 클론했을 때의 주의사항

🔍 에러 상황 요약

error: failed to push some refs to '원격 저장소 주소'
hint: Updates were rejected because the tip of your current branch is behind

이 에러는 로컬 브랜치의 커밋 이력이 원격보다 뒤처졌기 때문에, git push가 거부된 상황입니다. Git은 기본적으로 기존 커밋을 덮어쓰는 걸 방지하려고 합니다.


💣 git push -f 하면 어떻게 되나?

git push -f

-f 옵션은 강제로 내 로컬 커밋을 원격 브랜치에 덮어씌우는 명령입니다.

  • 로컬 커밋 기록만 남기고, 원격 저장소의 기존 커밋 내역은 사라집니다.
  • 특히 내가 .git 디렉토리 없이 일부 폴더만 복사해서 작업한 경우, 그 폴더만 포함된 새로운 커밋 기록이 생기므로, 푸시 시 기존 원격의 다른 폴더들은 삭제됩니다.

⚠️ git push -f원격 저장소의 변경 내용을 모두 덮어쓰기 때문에, 기존 파일들이 삭제될 수 있습니다. 개인 프로젝트에서만 사용하거나, 협업 중일 경우 팀원과 상의 후 사용해야 합니다.


🧨 예시 상황

  • 전체 리포지토리가 아니라 특정 폴더만 따로 복사해서 작업했음
  • 새로 git init하고 remote add로 원격 연결 후 git push -f
  • 이 경우 원격 저장소의 다른 파일들(복사하지 않은 폴더들)은 모두 사라짐

✅ 안전한 작업 방식

✔️ 방법 1. 기존 리포지토리 전체를 클론해서 작업

git clone [원격 저장소 주소]
# 작업한 폴더 복사해서 덮어쓰기
git add .
git commit -m "작업 내용 반영"
git push

→ 원격의 기존 폴더들도 유지되며, 내 작업도 반영됨.


✔️ 방법 2. pull 없이 병합해서 푸시

git fetch origin
git merge origin/main
git push

git pull을 하지 않더라도, 원격 변경사항을 병합하여 안전하게 푸시 가능.


🧭 덮어썼는지 확인하는 방법

git log --oneline

또는 GitHub에서 "Commits" 탭 확인
→ 기존 커밋들이 모두 사라지고 내 커밋 하나만 남아 있다면, 덮어씌운 상태입니다.


⏪ 이미 -f로 푸시했을 경우 복구법

  • GitHub의 이전 커밋을 브랜치로 복원하거나
  • 이전 커밋 해시를 이용해 git reset 또는 git cherry-pick으로 복구 가능

🧷 정리 요약

목적 명령어 주의사항
원격 내용을 무시하고 덮어쓰기 git push -f 기존 파일들 전부 삭제 가능성
안전하게 병합 후 푸시 git fetch + merge + push 충돌 해결 필요 가능성
리포지토리 전체 작업 git clone → 작업 → push 가장 안전하고 권장되는 방식

댓글