깃허브 리포지토리를 정리하면서 코드는 업로드 하지 않고, 배포 링크만 두었던 오래된 리포를 발견하였다.
로컬에는 코드가 있는데, 이왕 정리 겸 업로드 해야겠다! 라고 생각하고 github에 연동하기로 하였다.
작업 전 상태는 기존 리포에는 README.md 만 작성되어 있고, 로컬에는 다른 계정으로 기본 브랜치가 master로 설정이 되어 코드가 있었다.
1. VSCode와 연결하고자하는 리포 주소를 연결한다.
git clone <리포 주소>
2. 원격 저장소 추가
git remote add origin <리포 주소>
3. 로컬 브랜치와 원격 브랜치 연결하기
git push --set-upstream origin master
위까진 일반적이다. 우선 병합 전 내 상황은 이러하였다.
문제1. main에 있는 README.md와 master README.md가 충돌이 날 수밖에 없다.
문제2. 겹치지 않고 서로 다른 commit 기록이 있으면 PR을 생성할 수 없다.
문제3. 원격 저장소의 main 브랜치와 로컬의 main 브랜치가 동기화되지 않았다.
4. 문제3에서 동기화되지 않았으므로 최신 변경 사항을 가져와 동기화하기
git checkout main
git pull origin main
5. master → main 으로 변경사항 병합하기
git checkout master
git pull origin master
git checkout main
git merge master
6. 원격 저장소에 변경 사항 push 하기
git push origin main
* 하지만 1번의 문제가 해결되지 않아, " fatal: refusing to merge unrelated histories" 에러가 발생하였다.
7. 두 브랜치 강제로 병합하기
git pull origin main --allow-unrelated-histories
8. VSCode에서 충돌 부분을 확인 후 충돌 부분 수정 완료 후 main 브랜치에 commit 후에 push하기
git add README.md
git commit -m "(예시)충돌 해결"
git push origin main
9. master 브랜치 삭제하기
git branch -d master
*만약 master 브랜치가 마지막 commit이 아니거나, 병합되지 않은 commit이 존재한다면, 강제 삭제 -D 옵션을 사용한다.
git branch -D master
조금 헤맸던 부분이기에 기록하고자 올린다. git 명령어를 입력하기 전에 내 상황이 어떤지 명확하게 아는 것이 중요하다.
git branch -vv, git remote -v 와 같은 명령어를 통해 내가 어느 브랜치에 있는지, 원격 저장소가 잘 설정되어 있는지 확인하며 내 예상과 맞는지 확인하는 과정이 git을 익히기에 좋은 것 같다.
git을 잘 다루는 것도 좋은 능력 중 하나!