개발 공부를 하면서 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
'프로그래밍 > JAVA' 카테고리의 다른 글
final을 붙였는데도 왜 안에 값은 바꿀 수 있을까? (2) | 2025.06.12 |
---|