jnk1m
Foliage IT
jnk1m
전체 방문자
오늘
어제
  • 분류 전체보기 (209)
    • Today I Learned (34)
    • Java (47)
    • Database (15)
    • [NHN Academy] (27)
    • Spring (47)
    • HTML + CSS + JavaScript (11)
    • JSP (3)
    • Node.js (10)
    • React Native (2)
    • 기타 (8)
    • 스크랩 (5)

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
글쓰기 / 관리자
jnk1m

Foliage IT

[Git] 명령어 정리: 설치 및 초기 설정, 저장소 생성, 파일 추가와 커밋, 원격 저장소 업로드 + 에러 해결
기타

[Git] 명령어 정리: 설치 및 초기 설정, 저장소 생성, 파일 추가와 커밋, 원격 저장소 업로드 + 에러 해결

2023. 3. 29. 11:33

Git 저장소를 생성하기에 앞서! 터미널에서 git --version 명령어를 실행하여 Git이 설치되어 있는지 확인해 보자.

git --version

해당 명령어를 입력했을 때 깃이 설치되어 있다면 버전이 출력된다. 

 

만약 Git이 설치되어 있지 않다면, 터미널에서 다음 명령어를 실행하여 Git을 설치한다.

brew install git

 

설치를 완료했다면 Git을 사용하기 전에 사용자 이름과 이메일 주소를 설정해야 한다.

다음 명령어를 실행하여 Git의 사용자 이름과 이메일 주소를 설정한다.

git config --global user.name "Your Name"
git config --global user.email "youremail@example.com"

위의 명령어에서 "Your Name"과 "youremail@example.com"은 본인의 이름과 이메일 주소로 변경해야 한다. 

 


 

1. Git 저장소 생성

깃 저장소를 생성하길 원하는 디렉토리에서 다음 명령어를 실행하여 Git 저장소를 생성한다.

실행 시 '.git' 디렉토리가 생성되고 Git 저장소가 초기화된다.

git init

 

만약 현재 디렉토리가 깃 저장소인지 아닌지 확인하고 싶다면 다음 명령어를 실행하여 확인한다.

git rev-parse --is-inside-work-tree

현재 디렉토리가 Git 저장소인 경우 true를 출력하고 그렇지 않은 경우 false를 출력한다.  

 

git init 명령어를 실행하면 다음과 같은 문구가 뜬다.

힌트: Using 'master' as the name for the initial branch. This default branch name
힌트: is subject to change. To configure the initial branch name to use in all
힌트: of your new repositories, which will suppress this warning, call:
힌트:
힌트: 	git config --global init.defaultBranch <name>
힌트:
힌트: Names commonly chosen instead of 'master' are 'main', 'trunk' and
힌트: 'development'. The just-created branch can be renamed via this command:
힌트:
힌트: 	git branch -m <name>
/디렉토리/.git/ 안의 빈 깃 저장소를 다시 초기화했습니다

위의 실행 결과에서는 제공한 디렉토리에서 git init 명령어를 실행하여 Git 저장소를 초기화했다는 것을 나타내고 있다.

현재 Git 버전에서는 master 브랜치가 자동으로 생성되며, 이를 사용하기 전에 main 브랜치로 변경하라는 메시지가 출력된다.
메시지에서는 main, trunk, development 등 master 대신 사용할 수 있는 브랜치 이름을 제안한다.

 

git config --global init.defaultBranch main

config --global init.defaultBranch 명령어를 통해 master 브랜치의 이름을 main으로 변경해 주었다.

 

2. 파일 추가 및 커밋

디렉토리에 있는 파일을 수정하고, 새로운 파일을 추가한 후 다음 명령어를 실행한다. 

git add .
git commit -m "커밋 메시지"

'git add .'는 변경된 모든 파일을 스테이지에 추가하는 명령어이다.

한 개의 파일만 업로드하는 경우, git add {파일이름} 명령어
여러 개의 파일을 업로드하는 경우, git add {파일이름1} {파일이름2} {파일이름3} 를 사용한다. 

 

'git commit' 명령어는 커밋을 생성하고, '-m' 옵션은 커밋 메시지를 작성하는 옵션이다.

 

 

 

3. 원격 저장소에 업로드 

Git 저장소에 커밋한 내용을 Github와 같은 원격 저장소에 업로드하여 백업하거나 협업을 할 수 있다. 

먼저 원격 저장소를 생성한 후에 그 저장소의 URL을 복사하고 다음 명령어를 실행하여 원격 저장소와 로컬 저장소를 연결한다.

git remote add origin <원격 저장소 URL>

여기서 origin의 의미는?! 👉 원격 저장소 remote의 단축어를 origin으로 설정하겠다는 뜻! 원한다면 다른 이름으로 설정할 수도 있다. 

 

연결이 되었으면 다음 명령어를 실행하여 변경사항을 업로드할 수 있다.

git push -u origin main

 

앗 그런데..

error: src refspec main does not match any
error: 레퍼런스를 'https://github.com/디렉토리'에 푸시하는데 실패했습니다

라는 에러 메시지가 뜬다. Git에 Push를 할 때 발생하는 에러로, 나의 경우엔 현재 master 브랜치를 사용 중인데 main 브랜치에 push를 하려고 했기 때문에 발생했다..

분명히 기본 브랜치의 이름을 master에서 main으로 바꿔줬는데?!?!? 깃은 어렵다..🥺

git branch 명령어를 통해 현재 어떤 브랜치가 있는지 확인해 보니 master 밖에 없었다. 

참고로 git branch 명령어를 날린 후에 빠져나오려면 :q를 입력하면 된다..

main 브랜치를 생성해서 거기서 작업하기로 결정..

git checkout -b main

새로 만든 main 브랜치로 전환하여 다시 push를 했다. 

 

이번에는 다른 에러가 난다..

 ! [rejected]        main -> main (fetch first)
error: 레퍼런스를 'https://github.com/디렉토리'에 푸시하는데 실패했습니다
힌트: 리모트에 로컬에 없는 사항이 들어 있으므로 업데이트가
힌트: 거부되었습니다. 이 상황은 보통 또 다른 저장소에서 같은
힌트: 저장소로 푸시할 때 발생합니다.  푸시하기 전에
힌트: ('git pull ...' 등 명령으로) 리모트 변경 사항을 먼저
힌트: 포함해야 합니다.
힌트: 자세한 정보는 'git push --help'의 "Note about fast-forwards' 부분을
힌트: 참고하십시오.

현재 origin 원격 저장소의 main 브랜치에 로컬에 없는 내용이 있다고 한다. 원격 저장소의 내용을 로컬 저장소로 먼저 가져와야 한다. 

 

git pull origin main

먼저 위 명령어를 실행해서 원격 저장소의 내용을 로컬 저장소로 가져오자

 

그다음 다시 push 명령어를 날렸다. 그리고 또 다른 에러가 발생했다..

힌트: You have divergent branches and need to specify how to reconcile them.
힌트: You can do so by running one of the following commands sometime before
힌트: your next pull:
힌트:
힌트:   git config pull.rebase false  # merge
힌트:   git config pull.rebase true   # rebase
힌트:   git config pull.ff only       # fast-forward only
힌트:
힌트: You can replace "git config" with "git config --global" to set a default
힌트: preference for all repositories. You can also pass --rebase, --no-rebase,
힌트: or --ff-only on the command line to override the configured default per
힌트: invocation.
fatal: Need to specify how to reconcile divergent branches.
 ! [rejected]        main -> main (non-fast-forward)
error: 레퍼런스를 'https://github.com/디렉토리'에 푸시하는데 실패했습니다
힌트: 현재 브랜치의 끝이 리모트 브랜치보다 뒤에 있으므로 업데이트가
힌트: 거부되었습니다. 푸시하기 전에 ('git pull ...' 등 명령으로) 리모트
힌트: 변경 사항을 포함하십시오.
힌트: 자세한 정보는 'git push --help'의 "Note about fast-forwards' 부분을
힌트: 참고하십시오.

찾아보니 원격 저장소와 로컬 저장소가 다른 상태로 병합을 시도했기 때문에 발생한 에러라고 한다....

이 경우 git pull 명령어 대신에 git pull --rebase 명령어를 실행하면 된다..

git pull --rebase origin main

명령어를 실행하자 Successfully rebased and updated refs/heads/main. 라고 출력이 된다..

 

그러고 나서 다시 시도해 보니 성공적으로 푸시가 완료되었다.

깃..어렵다.. 

 

 

    '기타' 카테고리의 다른 글
    • sudo apt-get update 시 NO_PUBKEY 에러 해결 방법
    • [Git] 명령어 정리: 커밋 이후의 저장소 반영 내용 수정부터 원격 저장소와 로컬 연결 및 병합까지
    • 한글 2 byte의 기준은 무엇인가?
    • ToyStory.java

    티스토리툴바