방대한 문서보다 동작하는 소프트웨어

개발

[깃허브] 새 저장소에 푸시 하기, 기존 저장소에 로컬 데이터 푸시 하기

꽃게장세트 2021. 12. 9. 18:16

깃허브의 새 저장소에 푸시하기

echo "# NewProject" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin ~~.git
git push -u origin main

깃허브의 기존 저장소에 로컬 데이터 푸시하기

git init
git add *
git commit -m "first commit"
git remote add origin ~~.git
git branch -M main
git push -u origin main

git init 하면 .gitignore 파일이 만들어 진다. 곧바로 commit 한다면 불필요한 파일을 푸시 될 수 있다. 때문에 .gitignore에 적절한 규칙을 추가하도록 한다. 가령, .idea 를 추가하여 .idea 폴더 및 이하의 파일들은 푸시 되지 않도록 한다. 참고로, 깃허브 저장소 생성할때 .gitignore 파일을 만들게 되면(check on) 방대한 양의 규칙이 추가되어 유용하다.

오류 대응

깃허브의 기존 저장소와 현재 로컬 저장소를 연결할때 git push -u origin main 에서 반드시 아래 오류와 마주하게 된다. 서로 다른 저장소이기 때문이다. 병합을 거부하는 것이다. 힌트에서도 알 수 있다. hint: not have locally. This is usually caused by another repository pushing

 ! [rejected]        main -> main (fetch first)
error: failed to push some refs to 'git@github.com:ovso/AwairTest.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

이는, git pull 로는 해결할 수 없다. git pull origin main --allow-unrelated-histories 하여 해결 할 수 있다. 관련이 없는 두 저장소의 기록을 허용해주는 명령어다.

다만, 아래와 같은 충돌(CONFLICT (add/add): Merge conflict in .gitignore)이 발생했다. 로컬(안.스)과 깃허브에서 만든 .gitignore 가 충돌한 것이다. 당연한 결과다. 충돌은 간단히 수정해 주면 된다. git init 할때 생성된 .gitignore 파일을 지우거나 깃허브 저장소 만들때 .gitignore 를 제외하는 것도 충돌을 피하는 좋은 방법이다.