Git | GitLab

다른 두 레포지터리 병합

비번변경 2021. 7. 24. 22:15

살다 보면 같은 프로젝트에 대해 뭔가 문제가 생겨서, 아니면 단순 이동 목적으로 새로 레포지터리를 파는 일이 발생하기 마련이다.

하지만 추후 히스토리를 관리할 때에 보면, 같은 프로젝트지만 아예 별개의 레포지터리로 저장되어 있어 병합해야 하는 경우가 있을 수 있다.

 

그럴 때 아래의 절차 따르면 별개의 저장소를 커밋 히스토리까지 병합할 수 있다.

 

방법

1. 로컬 상에서 작업을 진행할 프로젝트로 이동한다.

 

2. 병합할 원격 저장소 추가

git remote add <병합할 저장소 이름> <병합할 저장소 주소>

# 예시
git remote add tomerge https://github.com/remote/url.git

 

3. 원격 저장소에 저장된 커밋 기록 fetch

git fetch <병합할 저장소 이름>

# 예시
git fetch tomerge

병합할 원격 저장소의 커밋 로그를 가져와 현재 로컬 레포지터리의 파일들과 비교한다. 병합을 하는 건 아니다.

충돌하는 파일이 존재하면 아래 명령으로 제외한다.

git reset HEAD <FILE>

 

4. 연관 없는 기록 병합

git merge --allow-unrelated-histories <병합할 저장소 이름>/<병합하고 싶은 branch 이름>

# 예시
git merge --allow-unrelated-histories tomerge/master

충돌이 발생할 부분들을 처리했다면, 이제 저장소를 병합하면 된다.

다만 보통 아예 다른 원격 저장소를 병합할 때에는 에러가 발생하거나 병합이 불가능하기 때문에 --allow-unrelated-histories 옵션을 주어서 서로 관련 없는 히스토리를 가진 저장소도 병합하도록 허용해야 한다.

 

5. 병합된 원격 저장소 삭제

git remote remove <병합한 저장소 이름>

# 예시
git remote remove tomerge

문제없이 병합을 완료했다면 추가했던 원격 저장소를 삭제한다.

 

 

6. 병합한 로그 커밋

git commit -m "병합을 설명하는 메세지를 적자."

 

이후는 로컬 프로젝트가 의도된 대로 잘 병합되었는지 확인한 후, 필요하다면 원격 저장소로 push하면 된다.