✏️기록하는 즐거움
article thumbnail

들어가기에 앞서
멋쟁이사자처럼 5기를 같이 참여하고 있는 분께서 Git 오류에 대해 도움을 요청해 주셨다.
예전에 경험해 봤던 문제이면서 Git의 동작 과정을 다시 한번 정리해 볼 수 있었기에 해결한 과정에 대해 기록해보고자 한다.

 

🚚 현재 레파지토리(Repository)에서 새로운 레파지토리로 파일 이동하기

현재 레파지토리에 있는 파일들을 다른 레파지토리와 합치고 싶다면 어떻게 해야 할까?

우선 나의 컴퓨터에 있는 폴더 즉, 로컬 환경에 있는 폴더와 연결된 remote를 옮기고 싶은 새로운 레파지토리와 연결시켜주어야 한다.

 

💡 여기서 Git의 remote란 무엇일까?

쉽게 얘기하자면 내 컴퓨터에 있는 폴더와 원격 저장소를 연결시켜 주는 명령어이다.

많은 사람이 사용하고 있는 GithubGit을 기반으로 소스를 관리할 수 있는 원격 저장소이다.

Github에서는 내 폴더의 어떤 소스를 관리할지 알 수 없기 때문에 이 remote 명령어를 사용해서 리모트 저장소를 추가함으로써 내 파일을 너의 레파지토리에서 관리할 거야!라고 알려주는 것이다.

즉, remote를 어디에 연결하는지에 따라서 A 레파지토리에서는 알고리즘 문제 풀이 대한 소스 폴더(혹은 파일)를, B 레파지토리에서는 Todo 애플리케이션에 대한 소스 폴더를 관리할 수 있게 되는 것이다.

따라서 첫 번째로 해야 할 것은 현재 내 폴더와 연결되어 있는 remote를 변경시키는 것이다.


♻️ remote 변경하기

git remote remove origin 
# 혹은 git remote rm origin
git remote add origin 새 레파지토리 주소

우리는 주로 origin 이라는 별명을 가진 remote 저장소를 추가한다.

따라서 새로운 리모트 저장소를 연결할 때 이전에 지정했던 origin이라는 저장소를 삭제하고, 다시 새로운 리모트 저장소와 연결시켜 주는 작업이 필요하다.

 

만약 이전에 remote add로 저장소를 추가할 때 origin이 아닌 myorigin 으로 했다면 git remote remove myorigin으로 remote 저장소를 삭제할 수 있다.

 

새 레파지토리의 주소는 해당 레파지토리 오른쪽에 보이는 <> Code를 클릭 후, 복사 버튼을 눌러서 가져올 수 있다.

위 레파지토리를 예시로 들었을 때 리모트 저장소를 추가한다면 아래와 같이 터미널에 작성하면 된다.

git remote add origin https://github.com/mihyunLee/mihyunLee.git

📥 연결한 레파지토리의 기존 데이터 가져오기

git pull origin main --allow-unrelated-histories

연결이 끝났다면 git pull 명령어를 사용하여 연결된 레파지토리의 데이터를 가져와야 한다.

git pull 명령어는 연결된 레파지토리에 있는 데이터를 가져와서 현재 로컬 환경과 병합(Merge)해준다.

 

💡 그렇다면 뒤에 --allow-unrelated-histories는 무엇일까?

기존의 레파지토리의 데이터와 새로 연결한 레파지토리의 데이터는 서로 다른 기록을 가지고 있다.

git에서는 기본적으로 공통적인 레파지토리를 가지고 있지 않다면 병합(Merge)을 거부한다.

따라서 git pull origin main만 한다면 오류가 발생하게 된다.

 

--allow-unrelated-histories 옵션은 독립적으로 구성되어 관계가 없던 데이터 기록을 병합하는 것을 허락해 준다는 의미로

기존의 레파지토리의 데이터와 새로 연결한 레파지토리의 데이터 기록을 병합할 수 있다.

이때, 두 레파지토리에서 동일한 이름을 가진 파일이 존재한다면 병합 충돌(Merge Conflict)이 발생할 수 있다.


✅ 새로 연결된 레파지토리에 변경사항 업데이트하기

git push origin main

병합 충돌 없이 새로 연결된 레파지토리의 데이터와 기존의 데이터가 잘 병합되었다면 git push 명령어를 통해 원격 저장소에 데이터를 업데이트하면 된다.

만약 충돌이 생겼다면 해결한 후에 push 해주자!


🧹 정리하기

git remote remove origin                          # 기존에 연결된 원격 저장소 연결 해제
git remote add origin 새로운 레파지토리 주소      # 새로운 레파지토리와 연결
git pull origin main --allow-unrelated-histories  # 새로운 레파지토리의 데이터를 가져와 기존 데이터 히스토리와 병합
git push origin main                              # 새로운 레파지토리에 변경된 데이터 업데이트 하기
profile

✏️기록하는 즐거움

@nor_coding

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!