Git : 여러 프로젝트들 모음에서 새로운 프로젝트 추가 시 문제 해결 방법
[상황 설명]
저장소에 프로젝트를 모아놓고 작업을 하다보면 가끔 새로운 컴퓨터에서 새로운 프로젝트를 추가하고 git push를 하고 싶은 상황이 온다. 그러면 기존의 저장소에 여러 프로젝트들을 pull 땡기고, 거기다 내가 지금 작업한 프로젝트를 푸쉬하면 될거라고들 생각한다. 하지만 전혀 다른 컴퓨터에서 작업을 한거기 때문에 git은 이 프로젝트는 기존의 프로젝트랑 상관이 없는 거라 판단 거부한다. 이럴때 강제로 pull/ push 하는 방법을 알아보자!
(pull 땡길 때 문제 상황)
PS C:\Users\USER\ass> git pull origin main
remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 1), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (2/2), 614 bytes | 51.00 KiB/s, done. From https://github.com/goodsosbva/Assignments * branch main -> FETCH_HEAD cd3c73a..9a04bd6 main -> origin/main fatal: refusing to merge unrelated histories
(해결 방법)
"fatal: refusing to merge unrelated histories" 오류는 Git에서 서로 관련이 없는 두 저장소(또는 브랜치)의 히스토리를 병합하려고 할 때 발생합니다. 이 오류를 해결하기 위해 다음 두 가지 방법 중 하나를 선택할 수 있습니다:
**방법 1: 저장소를 초기화하고 새로운 병합**
1. 현재 작업 중인 로컬 저장소를 초기화합니다. 다음 명령을 사용하면 현재 디렉토리를 Git 저장소로 다시 초기화할 수 있습니다.
git init
2. 원격 저장소를 다시 추가합니다.
git remote add origin https://github.com/goodsosbva/Assignments.git
3. 이제 다시 풀을 실행합니다.
git pull origin main
이 방법은 로컬 저장소를 완전히 초기화하고, 원격 저장소와의 새로운 관련성을 설정하는 방식입니다. 그러나 이렇게 하면 이전 히스토리가 모두 사라집니다.
**방법 2: `--allow-unrelated-histories` 플래그 사용**
1. `git pull` 명령을 실행할 때 `--allow-unrelated-histories` 플래그를 사용하여 병합을 강제로 허용할 수 있습니다.
git pull origin main --allow-unrelated-histories
이 방법은 이전의 두 저장소의 히스토리를 함께 병합합니다. 이렇게 하면 이전 히스토리와 새 히스토리가 함께 남게 됩니다.
주의: 이 방법을 사용할 때는 병합 결과를 주의해서 검토해야 합니다. 서로 다른 히스토리를 갖는 두 저장소를 병합할 때 충돌이 발생할 수 있습니다.
(push 할 때 문제 상황)
PS C:\Users\USER\ass> git push origin main
error: src refspec main does not match any error: failed to push some refs to 'https://github.com/goodsosbva/Assignments.git'
(해결 방법)
"error: src refspec main does not match any" 오류는 Git에서 로컬 브랜치(main)를 원격 저장소(origin)에 푸시하려고 시도하였으나, 로컬 브랜치가 존재하지 않거나 브랜치 이름이 다르게 지정되었을 때 발생합니다.
이 문제를 해결하려면 다음 단계를 따를 수 있습니다:
1. 먼저 로컬 저장소에서 어떤 브랜치가 존재하는지 확인하십시오. 다음 명령을 실행하여 로컬 브랜치 목록을 확인할 수 있습니다:
git branch
로컬에서 브랜치를 확인한 후 main 브랜치가 존재하지 않는 경우, 브랜치를 만들어야 합니다. 아래 명령으로 main 브랜치를 만들 수 있습니다
git checkout -b main
2. 다음으로, `git push` 명령을 사용하여 main 브랜치를 원격 저장소에 푸시합니다. 원격 저장소는 이미 "origin"으로 설정되어 있다고 가정합니다. 다음 명령을 실행하십시요
git push origin main
이렇게 하면 로컬의 main 브랜치를 원격 저장소의 main 브랜치로 푸시합니다.
3. 푸시가 완료되면 Git 원격 저장소에서 변경 내용이 반영될 것이며, 해당 원격 브랜치가 업데이트됩니다.
이러한 단계를 따르면 "error: src refspec main does not match any" 오류를 해결할 수 있어야 합니다.