티스토리 뷰

서로 다른 저장소를 하나의 저장소로 합치기

https://github.com/uyu423

 한 8월달 부터 github PR의 오의를 깨닫고 재미가 들려 열심히 커밋을 하다가 회사를 다니기 시작한 뒤로 허전해진 그래프를 보며 많은 사람들이 시도했던 일일커밋을 해보기로 마음을 먹음. 기존에 스터디나 자료 존안용으로 흩어져 있던 여러 저장소를 새로운 하나의 저장소로 합쳐야할 필요성을 느꼈다. 그래도 지금까지 쌓아놓은 것들이 있으니 커밋 로그를 날리기는 싫어서 최대한 유지하면서 합쳐보기로 했다. (그리고 이 생각이 모든 문제의 원흉이 되었다)

git fetch

합치려고 하는 저장소들은 아래 4개다.

 각 저장소를 클론하고 미리 클론해둔 새로운 저장소에 fetch를 사용하여 새로운 브랜치로 만든다. 그리고 해당 브랜치에서 디렉토리를 간단하게 정리하고 새로운 커밋을 만들어 놓았다.

git fetch ../Programming-Practice master:merge/PP # Programming-Practice 저장소의 master 브랜치를 이 곳의 merge/PP로 fetch !
git checkout merge/PP
mkdir 프로그래밍연습 && mv * 프로그래밍연습
git add *
git commit -m "저장소 병합. PP"

다른 히스토리 트리로 인해 병합이 불가능한 상황

 다음과 같이 브랜치가 형성이 되었지만 병합이 안된다...;; 원인을 찾아보니 다른 히스토리를 가진 브랜치 끼리는 머지할 수가 없다고 한다. 생활코딩에 문의한 결과..

git cherry-pick

 git cherry-pick으로 문제를 해결할 수 있다. 체리픽이란게 있는 줄은 알았지만 한번도 사용해본 적은 없다. 대충 찾아보니 커밋 해시 값을 가지고 해당 브런치에 해당 커밋을 그냥 쑤셔넣는 느낌..

git checkout merge/PP
git log #에서 가장 최근의 Commit SHA값을 복사해둔다.
git checkout master
git cherry-pick 9ede61845d75411e8cef35303b6eeaa5d7c26bdb
# 충돌 해결 후 commit. 나머지 브랜치도 동일하게 작업
git push origin master

 다음과 같이 이쁘고도 괴상한 트리가 잘 만들어졌다..!

체리픽! 넘나 좋은 것!


Origin Markdown URL : https://github.com/uyu423/TIL/blob/master/git%EA%B3%BC%20Github/%EC%84%9C%EB%A1%9C%20%EB%8B%A4%EB%A5%B8%20%EC%A0%80%EC%9E%A5%EC%86%8C%EB%A5%BC%20%ED%95%98%EB%82%98%EC%9D%98%20%EC%A0%80%EC%9E%A5%EC%86%8C%EB%A1%9C%20%ED%95%A9%EC%B9%98%EA%B8%B0.md

프로필사진

Yowu (Yu Yongwoo)

그냥 지나가는 흔한 백엔드개발자423 느낌 입니다
우분투 데스크탑 개발 환경을 선호합니다
최근에는 vscode에 vim 모드 올려서 쓰고 있습니다
개발용 키보드는 역시 해피해킹 프로2 무각입니다
락 밴드에서 드럼을 꽤나 오래 쳤었습니다