카테고리 없음

Git repository 생성후 push 안됨 (master -> main)

chanwoo23 2025. 4. 4. 17:29

 

폴더 및 파일로 코드작성을 다 한 뒤, 원격저장소에 저장하려고 한다.

깃허브 레포지토리에서 초록색 New 버튼을 눌러서 commit-test 라는 레포지토리를 만들어보겠다.

3개의 체크 박스 중 첫 번째 박스를 선택하고 Create 하면 

이 레포지토리에서 main 이 디폴트 브랜치로 설정될 것이고 나중에 설정에 들어가서 바꿀 수 있다고 나온다.

레포지토리를 생성하면 이렇게 나오는 것을 볼 수 있다.

 

README.md 파일을 만들고 싶지 않다면 체크를 하지 않고 생성하면 된다.

(그러면 나중에 커밋 푸쉬 한 후 다음과 같은 알림이 나온다)

 

일단 나는 README.md 파일을 생성한 방향으로 원격저장소를 사용해보겠다.

 

내가 사용하는 에디터는 VSC(Visual Studio Code)이다. 

 

test 폴더를 만들고 vsc에 들어가서 해당 폴더를 연다 (맥 : command+O / 윈 : control+O )

test.txt 파일을 만들고 터미널을 열어준다

이 test.txt 를 방금 만든 commit-test 레포지토리(원격저장소)에 올려줄 것이다.

 

https://kkangsg.tistory.com/82

 

[6/24 엘리스트랙 이론강의1]CLI&GIT-이고잉코치님

바탕화면에 work폴더를 만들고 vsc로 들어온다 shell이 bash가 되도록 한다. (다른 shell들도 있지만, 명령어가 달라서 bash로 통일 / 운영체제에 따라 초기 shell이 다를 수 있음) nano파일편집기를 이용해

kkangsg.tistory.com

$ git init
$ git add [디렉토리명]
$ git commit -m "commit message"

다음과 같이 하면 로컬 깃 저장소에 test.txt 가 올라갔을 것 이다.

 


이제 원격저장소와 연결해주자!!! 🧚‍♀️

 

혹시라도 다른 원격저장소와 연결되어있는지 확인해보자

//연결된 원격저장소 있는지 확인
$ git remote -v

아무것도 안 나오면 연결된 원격저장소가 없다는 것이고

위와 같이 나오면 이미 연결된 원격저장소가 있다는 뜻이다

 

이 경우에는 원격저장소를 삭제하면 된다,,!!

(나는 처음에 이걸 몰라서 깃헙 레포지토리도 지우고 파일 백업해두고 폴더 지우고 git init부터 다시 했던 기억이,,,ㄸㄹㄹ)

//이미 존재하는 원격저장소 삭제
$ git remote rm origin

기존의 원격저장소 삭제한 뒤에, 내가 원하는 원격저장소에 연결해보자

//원격 저장소와 연결
$ git remote add origin [깃헙 레포지토리 주소]

위에서 생성한 레포지토리에 들어가서 초록색 code를 클릭하면 아래에 HTTPS로 나오는 주소가 있다 (SSH랑은 다르기 때문에 주의)

(전체선택해서 복사해도 되지만) 옆의 파일모양을 클릭하면 자동으로 원격저장소 주소 전체가 복사된다.

연결이 된 것을 확인할 수 있다.

 

 


여기서부턴 시행착오라서 보기만 하기!!!

이제 로컬 깃 저장소 .git 에 커밋되어 있는 우리의 test.txt 파일을 원격저장소 에 push 하기 위해 아래와 같은 명령어를 입력한다.

//원격저장소에 push
$ git push -u origin master

(이 명령어는 방금 연결한 원격저장소의 브랜치 중 이름이 master인 브랜치에 push 해달라는 의미)

 

하지만 이렇게 하면 깃헙 레포지토리에 갔을 때

 

원래 하나밖에 없었던 브랜치가 2개가 된 것을 볼 수 있고

레포지토리의 디폴트 브랜치는 main 브랜치이지만 나는 master 브랜치에 푸쉬했기 때문에

푸쉬한 파일을 보고 싶으면 main브랜치를 master브랜치로 바꿔줘야하고,

글 위에서 생성하겠다고 체크한 README 파일도 없는 것을 볼 수 있다. (리드미파일은 메인브랜치에 생성됐기 때문)

 


 

알아보니 Github에서 처음 브랜치를 만들고 이름을 붙일 때 master branch 라고 했다. 즉 디폴트 브랜치가 마스터 였지만,

이때의 master가 master-slave 에서의 master이기 때문에, Black lives matter 운동의 연장으로

미국 IT업계에서는 논란이 많은 master-slave, blacklist-whitelist 와 같은 언어적 문제를 해결하려는 움직임이 있다.

 

그런 의미로 GitHub 에서도 2020년 10월을 기준으로 신규 레포지토리를 생성시 디폴트 브랜치 명이 main으로 생성된다.

https://github.blog/changelog/2020-10-01-the-default-branch-for-newly-created-repositories-is-now-main/

 


 

그래서 나는 master branch 가 아니라 main branch 에 push 하고 싶어서 

원격저장소를 연결해준 뒤에, master 대신 main을 작성했는데

$ git push -u origin main

에러가 나왔다....

 

👀  띠  👀  용  👀 어떡하지...

찾아보니까 

나는 vsc에디터 안에서 terminal을 열어서 사용하는데 vsc에서는 아래와 같이

master branch 가 디폴트 값이어서 그랬던 것이다.

vsc의 왼쪽 하단

 

내가 현재 있는 브랜치 명을 확인하는 명령어는

$ git branch

이다.

 

확인해보면 master브랜치 인 것으로 나온다

master 브랜치에서 아무리 main 브랜치로 푸쉬해주세요!! 라고 입력해도

$ git push -u origin main

 

main과 매칭되지 않는다는 에러가 나오는 것은 당연하다.

 

그럼 우리는 branch 명을 바꿔주면 된다!!🐥

 


여기서부터는 따라해도 됩니다!!

$ git branch -M [되고싶은 branch name]
$ git branch -m [현재 branch name] [바꾸고싶은 branch name]

main branch 로 바꿔줌

위와 같은 명령어를 입력하면 브랜치 명 master 에서 main 으로 바뀐 것을 볼 수 있다.

 

vsc의 왼쪽 하단

 

( 이때 주의!! 

브랜치를 전환하는 것 브랜치 명을 바꿔주는 것은 다르다.

브랜치를 전환하는 것은 여러 브랜치가 있을 때 $ git branch checkout [전환하고싶은 브랜치명] 으로 입력한다. )

 

 

 

브랜치 전환을 한 다음에

$ git remote add origin [원격저장소 주소]

원격저장소 연결을 해줘도 된다.

브랜치 전환과 원격저장소 연결의 순서는 상관없다!

 

 

 

이제 아까 입력했던 push 명령어를 입력하면 

$ git push -u origin main

로컬 깃 저장소 -> 원격저장소 로 스무스하게 이동할거라 생각했지만,,!  또 에러 발생,,,🤦‍♀️

이유는 우리가 처음 깃허브에서 레포지토리를 생성할 때 README.md 파일을 생성했기 때문에

이 파일을 먼저 pull 로 로컬에 가져오고 (힌트에 나와있는 것 처럼)

그 이후에 test.txt(내가 올리고 싶은 파일)을 push 해야하는 것이다.

 

(만약, README.md 파일을 생성하는 체크박스를 클릭하지 않고 저장소 생성 했다면 pull 없이 push 바로 하면 된다)

 

$ git pull origin [branch name]
$ git pull

지금은 브랜치가 하나라서 $ git pull origin main 이든 $ git pull  이든 상관 없지만, 가능하면 전자처럼 브랜치명까지 정확하게 명시해주자

 

이제 드디어 기다리고 기다리던 PUSHHHHH!!!!!!!!!

$ git push -u origin main

깔끔하게 done. done. 100% 가 나오는 것을 볼 수 있다.

 

깃허브 레포지토리 페이지에 가서 봐도

main branch 1개로 깔꼼하게 업로드 된 것을 확인할 수 있다.

 

여기까지 깃헙 레포지토리의 생성부터 첫번째 업로드까지 이다.


 

이제 두번째 커밋 푸쉬는 처음보다 훠어어어어얼씬 쉽다!!

test.txt 에 왈랄ㄹ랄라 수정하고 새로운 파일인 test2.txt 를 생성하면 아래와 같이 나온다.

 

 

(아마 정확하진 않지만 M : modified / U : untracked 아닐까 생각해본다! 오쨋든!)

 

 

git status로 확인해보면 다음과 같이 나오고, 

$ git add .
//으로 해도 되고

$ git add test.txt 
$ git add test2.txt
//으로 각각 해줘도 된다

그 이후에 commit push 를 이어서 해주면, 터미널 창에는 아래와 같이 나오고

깃헙 저장소에 가서 확인해보면 잘 올라온 것을 볼 수 있다.

 

이렇게 두번째 이후의 커밋&푸쉬 방법도 완료~~ 끝!!😊

 


[총 정리] VSC에서 github repository에 main branch 로 push 하는 방법

//로컬 깃 저장소 생성(.git 폴더 생성)
$ git init

//Working directory -> Staging Area
$ git add [directory]
$ git add .

//Staging Area -> repository(.git)
$ git commit -m "commit message"

//원격저장소와 연결
$ git remote add origin [원격저장소 주소]

//브랜치 명 바꾸기
$ git branch -M [branch name(main)]
$ git branch -m [현재 branch name] [바꾸고싶은 branch name]

//(선택) README.md가 있다면 : push 보다 pull 먼저
$ git pull origin [branch name(main)]

//로컬 레포지토리 -> 원격 레포지토리
$ git push -u origin [branch name(main)]


//파일 수정 및 추가 이후 : 다음번 commit & push
$ git pull origin [branch name] (선택:다른 장소에서 작업한게 없으면 안해도 됨)
$ git add [directory]
$ git commit -m "commit message"
$ git push -u origin [branch name]

 

[ git에 대한 여러가지 명령어 ]

//현재 상태 보여줌
$ git status

//현재 브랜치 확인
$ git branch -v

//지금까지의 모든 커밋에 대한 내용 조회(커밋아이디, 사용자이름, 날짜, 브랜치)
$ git log

//git log의 그래프 옵션(그래프로 나타냄)
$ git log --graph

//HEAD가 가리키는 브랜치 바꾸기
$ git check [branch name]

//git init 취소하기 (.git 폴더가 삭제 & 로컬저장소 지정 해제)
$ rm -r .git

 

$ git log

$ git log --graph

 

위의 명령어 말고도 더 많이 있지만 그건 그때그때 필요하면 찾아서 사용하는 걸로! :>

이정도만 알고 있어도 현재로는 충분할 것 같다.

 

 


[참고]

$ git push 와 $ git push -u origin [branch name] 의 차이

브랜치가 하나일 때는 둘 다 동일한 브랜치로 푸쉬를 해주는 것을 의미

BUT 만약 브랜치가 두 개 이상인 경우에는 후자처럼 반드시 브랜치 이름을 명시해줘야 한다.

우리는 실수하지 않기 위해서 후자로 표현하는 것에 익숙해지면 좋을 것 같다!

 

REPOSITORY와 로컬저장소의 차이 때문에 해결이 안될시엔

pull 로 레포를 땡겨와 푸쉬 해준다 이 과정에서 pull 이 안되는데 그럴때는 ↓ ↓ 해준다.

로컬 저장소에 있는 프로젝트를 깃허브 사이트를 통해 만든 저장소로 push 하는 경우에 이런 메세지가 뜨는 경우가 있다.

 

1
2
3
4
5
6
7
8
C:\Users\gitProject>git push origin master
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/userId/userProject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
cs

 

 

push 전에 먼저 pull을 해서 프로젝트를 병합해 주어야 한다. 

 

1
 refusing to merge unrelated histories
cs

 

pull 명령 실행시 이런 문구와 함께 진행되지 않는다면, 다음의 명령으로 실행한다.

 

1
git pull origin 브런치명 --allow-unrelated-histories
cs

 

--allow-unrelated-histories   이 명령 옵션은 이미 존재하는 두 프로젝트의 기록(history)을 저장하는 드문 상황에 사용된다고 한다. 즉, git에서는 서로 관련 기록이 없는 이질적인 두 프로젝트를 병합할 때 기본적으로 거부하는데, 이것을 허용해 주는 것이다.

 

요약하자면 init -> remote 설정후 -> add -> commit ->pull(x) -> git pull origin 브런치명 --allow-unrelated-histories

-> pull(O) -> PUSH!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

이렇게 하여 성공하였다.