프로그래밍/JAVA

⚙️ Git 오류 해결기: 기존 저장소에 폴더 구조 새로 정리해 푸시하려다 생긴 문제 해결기

카멜필름 2025. 6. 23. 10:15

개발 공부를 하면서 java-basic, java-mid1, java-start, 그리고 기존의 JavaPractice 폴더까지 단계별로 학습한 내용을 하나의 GitHub 리포지토리로 정리하고 싶었다.
그런데 막상 정리된 폴더를 GitHub에 푸시하려고 하자 오류가 발생했다.

728x90

 

📂 폴더 구조

/Desktop/study/inflearn/java/
├── java-basic/
├── java-mid1/
├── java-start/
└── JavaPractice/   ← 여기서 문제가 발생

❗ 문제 상황

Git 명령어로 git add .를 하자 다음과 같은 경고가 떴다:

JavaPractice 폴더 안에 .git 디렉토리가 있어서 Git이 서브모듈로 인식한 것.

 

 

✅ 해결 방법 1: .git 디렉토리 삭제

내 목적은 JavaPractice 폴더도 그냥 일반 폴더로 포함시키는 것이었기 때문에 폴더 내부의 .git을 제거해줬다

rm -rf java/JavaPractice/.git

📦 변경 사항 커밋 및 푸시 시도

git add .
git commit -m "Add all Java folders including JavaPractice"
git push origin main

하지만 푸시는 다음과 같은 에러로 막혔다.

! [rejected]        main -> main (fetch first)
error: failed to push some refs to 'https://github.com/Jina-yu/JavaPractice.git'
hint: Updates were rejected because the remote contains work that you do not have locally.

❗ 에러 원인

GitHub 원격 저장소에는 이미 다른 내용이 있었고,
내 로컬은 그 내용을 가져오지 않고 그냥 푸시하려 했기 때문에 충돌이 발생했다.

 

✅ 해결 방법 2: 원격 저장소와 병합

기존 원격 히스토리를 가져오고 병합을 진행:

git pull origin main --allow-unrelated-histories

이 명령을 실행하면 Vim 편집기 화면이 뜬다.

 

당황하지 말고

[Esc] → :wq → [Enter]

이렇게 입력하면 머지 커밋 메시지가 저장되고 병합 완료!

SMALL

 

✅ 마지막으로 푸시!

git push origin main

모든 폴더가 잘 올라갔고, 원하는 구조로 GitHub 저장소가 정리됐다.

💡 정리하며

이번 오류 해결을 통해 다음을 배웠다

  • 폴더 내부에 .git 디렉토리가 있을 경우, 상위 Git 저장소는 그것을 서브모듈로 인식한다.
  • GitHub에 이미 내용이 있는 리포지토리에 푸시하려면 pull → merge → push 순서를 따라야 한다.
  • Vim 병합 커밋 메시지 화면은 겁먹지 말고 :wq로 종료하자.

 

🔗 관련 명령어 요약

rm -rf 폴더/.git               # 서브모듈 방지
git pull origin main --allow-unrelated-histories
git push origin main

🧠 Git은 항상 현재 위치와 연결 상태를 이해하는 것이 핵심이다.

혼자 개발 공부하더라도 이런 실전 Git 사용 경험은 협업과 실무의 기반이 된다.
이번 이슈 정리는 단순한 에러 해결이 아니라 Git을 더 깊이 이해하는 계기가 됐다.

728x90
LIST