제목은 git Repository 합치기로 하겠습니다. 근데 이제 commit history를 곁들인
나는 성격이 비슷한 두개의 git repository가 있다.
하나는 요즘 블로그에 정리하는 글들을 담는 TIL,
하나는 전에 매일 JavaScript의 ES6 이상 문법을 공부하며 채운 TIL_modernJsGuide..
그래서 이 두 저장소를 합치기로 했다.
약 두 달째 1일 1커밋을 하는 중이니 내 소중한 잔디들을 지켜주는 것이 가장 중요했다.
두 저장소 준비
합치고 싶은 두 저장소를 A와 B라고 하자.
A의 데이터와 commit history를 B로 가져온다고 가정한다면,
B는 현재 로컬에 있어야 하고 A의 github 주소를 알고 있어야 한다.
나의 경우는 'TIL_modernJsGuide'를 'TIL'에 넣을 예정이니,
로컬에 TIL을 최신 상태로 두고 TIL_modernJsGuide의 원격 저장소 주소를 준비한다.
원격 저장소 추가하기
합치려면 데이터가 필요하지 않겠는가?
B의 로컬 저장소로가서 A의 원격 저장소를 추가하자
git remote add [이름] [원격 저장소 주소]
여기서 이름은 해당 로컬 저장소에서 쓰게될 원격 저장소의 키 값이니 자유롭게 본인이 구별할 수 있는 값이면 무엇을 써도 상관없다.
나의 경우에는 TIL에 TIL_modernJsGuide의 원격 저장소를 mjg라는 이름으로 연결했다.
연결한 뒤 현재 연결되어 있는 원격 저장소를 한번 확인해주면 더욱 좋다.
git remote add mjg [email protected]:shshhan/TIL_modernJsGuide.git
git remote -v
확인해보면 mjg라는 이름으로 잘 연결되었다.
가져오고 합치기
연결까지 끝났으니 이제 데이터를 끌고온 뒤 제대로 합치기만 하면 된다.
git fetch [원격 저장소 이름]
git merge [새로운 브랜치 이름]
fetch 명령어를 수행하면 원격 저장소에서 데이터를 끌고 온 뒤에 새로운 브랜치가 생성되고,
merge 명령어를 통해 새로운 브랜치를 합치면 된다.
git fetch mjg
git merge mjg/main
나의 경우는 원격 저장소 연결할 때 이름을 mjg로 했기 때문에 이 이름으로 fetch 명령어를 수행했고,
새로 생성된 mjg/main을 merge했다.
그런데 여기서 두 저장소가 연관성이 없다면 "fatal: refusing to merge unrelated histories" 에러가 발생한다.
이 경우에는 merge 명령어에 옵션을 추가해주면 해결된다.
git merge --allow-unrelated-histories [새로운 브랜치 이름]
그러면 위와 같은 메세지가 뜨는데 가볍게 나가면 된다.
메세지가 뜬 창은 git 설치할 당시 설정에 따라 다르겠지만
위 캡쳐와 같이 vim 편집기로 떴다면 esc를 누르고 :q를 입력한 뒤 엔터를 누르면 된다.
그러면 이제 이렇게 merge에 성공한 그림이 나오게 된다.
결과 확인해보기
파일들은 제대로 들어온 것 같은데 커밋 히스토리도 제대로 같이 들어왔을까?
git log --oneline
커밋 히스토리를 한줄로 표시해주는 명령어다.
작업 전에는 이렇게 기존 저장소의 커밋 히스토리만 보였지만
작업이 끝난 뒤에는 합쳐진 저장소의 커밋 히스토리도 잘 들어온걸 확인할 수 있다.
이제 해당 저장소를 원격 저장소에 push해보면 원격 저장소에서도 커밋 히스토리가 합쳐져 있는 것을 볼 수 있다.
참고
https://velog.io/@lina0322/git-git-repository-합치기git-log-지키기?utm_source=pocket_mylist
Author And Source
이 문제에 관하여(제목은 git Repository 합치기로 하겠습니다. 근데 이제 commit history를 곁들인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@shawnhansh/git-commit-history-유지하면서-Repository-합치기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)