remote repository를 local host pc에 add하는 방법

2025. 5. 8. 12:39Git

현재 remote repository가 empty history 상태일 경우,

두 가지 방법의 local host pc에 add하는 방법이 있음.

 

1. …or create a new repository on the command line

echo "# hello" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/intheeast/hello.git
git push -u origin main

 

2. …or push an existing repository from the command line

git remote add origin https://github.com/intheeast/hello.git
git branch -M main
git push -u origin main

 

✅  로컬과 리모트 리포지토리의 히스토리가 맞지 않을 경우에 해결 방법

git merge origin/main --allow-unrelated-histories

 

이 명령은 두 Git 저장소의 히스토리가 서로 전혀 연결되어 있지 않아도 강제로 병합(merge) 하도록 허용하는 명령어입니다. 

 

🔍 명령어 구성 해석

git merge origin/main --allow-unrelated-histories

 

부분 의미
git merge 현재 체크아웃된 브랜치와 다른 브랜치를 병합
origin/main 원격 저장소(origin)의 main 브랜치. 이걸 병합하려는 대상
--allow-unrelated-histories 두 브랜치의 커밋 그래프에 공통 조상(commit ancestor) 이 없더라도 병합을 강제로 수행

 

❓ 왜 --allow-unrelated-histories가 필요한가?

기본적으로 Git은 두 브랜치가 동일한 히스토리 기반(공통 조상)을 공유해야 병합을 허용합니다.
그러나 다음과 같은 경우에는 공통 조상이 존재하지 않습니다:

  1. 🔀 두 개의 독립적인 Git 저장소를 합치는 경우
    • 예: git init으로 시작한 로컬 저장소에 GitHub에서 클론해 온 저장소를 병합할 때
  2. 🔄 이전에 Git history를 삭제한 경우
    • 예: .git 디렉토리를 지우고 다시 git init 후 푸시/풀을 시도
  3. 📦 프로젝트 템플릿을 따로 가져와 병합하려는 경우
    • 예: boilerplate 저장소와 내 프로젝트를 합칠 때

이때, Git은 기본적으로 다음과 같은 오류를 발생시킵니다:

fatal: refusing to merge unrelated histories

→ 이 오류를 무시하고 병합을 강제하려면 --allow-unrelated-histories 옵션을 붙여야 합니다.

 

✅ 실행 예제

git init
git remote add origin https://github.com/user/repo.git
git fetch origin
git merge origin/main --allow-unrelated-histories
  • 이 시나리오는 로컬 저장소를 먼저 만들고, 나중에 원격 저장소를 연결한 후 병합하려는 경우에 흔합니다.

🧠 정리

항목 설명
목적 서로 다른 Git 히스토리를 가진 브랜치를 병합할 때 오류 방지
주요 사용 시나리오 독립된 프로젝트 병합, 이관, 초기화된 로컬 저장소와 기존 원격 병합
관련 오류 메시지 fatal: refusing to merge unrelated histories
권장 여부 임의로 히스토리를 합치는 경우가 아니라면 사용 주의 (명시적으로 사용해야 함)

'Git' 카테고리의 다른 글

GitBash Credentials 수정  (0) 2024.11.14
git log --oneline --decorate --graph --all  (0) 2024.07.25
Refs  (0) 2024.07.24
git diff  (0) 2023.12.12
Tracking branch와 Upstream  (0) 2023.06.30