github 로그인 > Your Repositories 에 들어가면 내가 만들거나 속해있는 레포지토리들을 확인할 수 있습니다.
New 버튼을 눌러 기존의 레포지토리들을 합칠 새로운 레포지토리를 생성합니다.
저는 Project 라는 이름으로 레포지토리를 새로 생성했습니다.
생성한 레포지토리 메인으로 가서 해당 레포지토리의 주소를 복사한 후에 로컬 저장소로 클론(clone)해 옵니다.
이때 클론할 위치는 로컬저장소가 있는 위치여야 합니다.
(로컬저장소가 없다면, git init
으로 저장소를 만들어 주세요)
git clone #https://github.com/JemmaJeon/Project.git
git clone 하나로 합칠 레포지토리 주소
를 입력해주면 해당 로컬 저장소로 생성한 레포지토리가 들어옵니다.
새로 생성한 레포지토리에 아무런 기록이 없다면 기존의 레포지토리들을 곧바로 합칠 수 없습니다. 해당 레포지토리의 생성 여부가 확실하지 않기 때문에 아래와 같은 오류가 발생합니다.
Working tree has modifications. Cannot add.
이 문제를 해결하기 위해, 터미널을 켜서 clone
한 레포지토리에 commit
이나 push
를 했다는 기록을 남겨줍니다. 커밋할 사항이 없어도 메세지만 들어가면 커밋이 되니 기록은 자동으로 남게 됩니다.
(기존에 이용하던 로컬저장소에서 커밋을 시도하는 경우라면 경우가 다르니, 커밋 전 사항들을 반드시 확인해 주세요)
git add .
git commit -m '아무 메세지'
합치고자 하는 레포지토리들의 주소를 복사해 옵니다.
이때 가장 왼편에 메인 가지(Branch) 명까지 반드시 확인해 주세요. 레포지토리를 생성할 때 보통 자동으로 main 혹은 master로 생성이 되지만 다른 이름으로 생성했을 수도 있습니다.
이때 메인 브랜치 이름을 잘못 입력하면, 아래와 같은 오류가 발생합니다.
fatal: couldn't find remote ref 브랜치명
혹시 같은 오류 내용을 보셨다면, 메인 브랜치 이름을 잘못 입력한 경우가 아닌지 잘 확인해 보세요.
git subtree add --prefix=기존레포지토리명 기존레포지토리주소 기존메인브랜치명
# 예시
git subtree add --prefix=Workspace https://github.com/JemmaJeon/Workspace.git master
정상적으로 작업이 완료된 경우라면 위와같은 문구를 볼 수 있습니다.
이제 같은 방법으로 남아있는 것들을 새로 생성한 레포지토리 가지로 합치면 됩니다.
남아있는 레포지토리들을 하나로 붙이는 데 성공했다면 이제 원격저장소(github)로 저장된 내용들을 push
해서 업데이트하면 됩니다.
원격저장소로 push
를 하기 위해서는 clone
을 해온 것만으로는 안 되므로, 먼저 remote
로 연결이 되어있어야 합니다.
git push origin HEAD:main --force
--force
명령어를 쓴 이유는, 충돌을 방지하기 위해서입니다. 리모트 변경 사항을 체크하지 않고 곧바로 저장소로 푸시하려고 하면 아래와 같은 충돌이 발생합니다.
리모트에 로컬에 없는 사항이 들어 있으므로 업데이트가 거부되었습니다
어쨌든 새로 생성한 레포지토리는 생성 후 처음 commit
혹은 push
한 내역만 가지고 있기 때문입니다.
(새로운 레포지토리라 덮어써도 상관없어서 push를 강행했지만, 사용하던 레포지토리에 다른 레포지토리들을 합치는 경우에는 다른 방법을 찾아야 합니다)
결국 우여곡절 끝에 git
레포지토리 병합까지 성공했습니다.
That's right! I strongly agree with you. Can you rely me? I want to ask you some questions. I'm delighted if you can do that. In addition, when you'r free, why don't you enjoy color tunnel? It's so fun!
안녕하세요?
병합이후 과거 레포지토리는 삭제해도 과거 잔디가 날라가진 않나요 ?