콘텐츠로 건너뛰기

Git 사용 방법 (GitHub 원격 저장소) (2편)

  • 기준

이 글은 Git 사용 방법 (로컬) (1편)에서 이어진다.
이번 편에서는 1편에서 만든 로컬 Git 저장소를 GitHub 원격 저장소와 연결하는 방법을 정리한다.

1편에서는 로컬 PC에서 Git 저장소를 만들고, 파일을 추가하고, 커밋을 남기고, 기록을 확인하는 방법을 다뤘다. 즉, 본인의 PC 안에서 Git을 사용하는 방법을 먼저 배웠다.

하지만 실제 개발에서는 내 PC 안에만 코드를 저장하지 않고, GitHub 같은 원격 저장소에 코드를 올려둔다. 원격 저장소를 사용하면 다른 PC에서도 이어서 작업할 수 있고, 다른 사람과 협업하기도 수월해진다.

1. 로컬 저장소와 원격 저장소의 차이

1편에서는 내 PC 안에 Git 저장소를 만들었다. 이처럼 내 PC 안에 있는 Git 저장소를 로컬 저장소(Local Repository)라고 한다.

로컬 저장소에서는 파일을 만들고, 수정하고, git add로 스테이징하고, git commit으로 기록을 남긴다. 즉, 실제 작업은 먼저 내 PC 안에서 이루어진다.

하지만 로컬 저장소는 내 PC 안에만 있기에 다른 PC에서 이어서 작업하거나, 다른 사람과 함께 작업하려면 불편하다.
이때 사용하는 것이 원격 저장소(Remote Repository)다.

원격 저장소는 GitHub 같은 인터넷 서버에 있는 Git 저장소다. 내 PC에서 만든 커밋을 GitHub에 올릴 수도 있고, GitHub에 있는 변경 내용을 다시 내 PC로 가져올 수도 있다.

1편에서 배운 Git 흐름이 내 PC 안에서 기록을 남기는 과정이었다면, 이번 2편은 그 기록을 GitHub와 주고받는 과정이라고 보면 된다.

2. GitHub에서 새 저장소 만들기

먼저 GitHub 웹사이트에서 새 저장소를 만들어야 한다.

이 글에서는 1편에서 만든 git-practice 폴더를 GitHub에 올린다고 가정한다.
GitHub에서 새 저장소를 만드는 과정은 다음과 같다.

1. GitHub에 로그인
2. 오른쪽 위의 + 버튼 또는 New repository 버튼을 누른다.

GitHub - New repository
GitHub - New repository

3. Repository namegit-practice를 입력한다.
4. 공개 저장소로 만들고 싶으면 Public을 선택한다.
5. 개인 연습용으로만 쓰고 싶으면 Private을 선택한다.
6. Add a README file은 일단 체크하지 않는다.
7. Add .gitignoreNo .gitignore로 그대로 둔다.
8. Choose a licenseNo license로 그대로 둔다.
9. Create repository 버튼을 누른다.

GitHub - New repository

여기서 중요한 점은 README, .gitignore, license를 처음부터 GitHub에서 만들지 않는 것이다.

이미 내 PC에 git-practice 로컬 저장소가 있고, 그 안에 커밋도 있는 상태이기 때문이다. 그런데 GitHub에서 README 파일을 먼저 만들어버리면, 내 PC의 커밋 기록과 GitHub의 커밋 기록이 서로 달라질 수 있다.

처음 Git을 배우는 단계에서는 이런 상황이 헷갈릴 수 있으므로, 이번 실습에서는 GitHub 저장소를 비어 있는 상태로 만든 뒤 내 PC의 로컬 저장소를 GitHub에 올리는 방식으로 진행한다.

3. 로컬 저장소와 GitHub 저장소 연결하기

GitHub에서 빈 저장소를 만들면 저장소 주소가 보인다. 보통 아래와 비슷한 형태다.

https://github.com/사용자명/git-practice.git

이 주소는 내 PC의 로컬 저장소와 GitHub 원격 저장소를 연결할 때 사용한다. 이제 터미널에서 1편에서 만들었던 폴더로 이동한다.

cd D:\git-practice

그리고 아래 명령어를 입력한다.

git remote add origin https://github.com/사용자명/git-practice.git

여기서 origin은 원격 저장소에 붙이는 별명이다.

GitHub 저장소 주소는 길기 때문에 매번 전체 주소를 입력하기 어렵다. 그래서 Git에서는 원격 저장소 주소에 짧은 이름을 붙여서 사용한다. 가장 많이 쓰는 기본 별명이 origin이다.

위 명령어를 나누어 보면 다음과 같다.

git remote add: 원격 저장소 주소를 추가한다.
origin: 이 원격 저장소의 별명을 origin으로 정한다.
https://github.com/사용자명/git-practice.git: 실제 GitHub 저장소 주소다.

연결이 잘 되었는지 확인하려면 아래 명령어를 입력한다.

git remote -v

출력 결과는 다음과 비슷하게 나타난다.

origin  https://github.com/사용자명/git-practice.git (fetch)
origin  https://github.com/사용자명/git-practice.git (push)

fetch는 원격 저장소에서 가져올 때 사용하는 주소이고, push는 원격 저장소로 올릴 때 사용하는 주소이다.

보통 GitHub 저장소 하나만 연결해서 사용할 때는 fetch 주소와 push 주소가 동일하게 표시된다.

4. 첫 push로 GitHub에 코드 올리기

이제 로컬 저장소와 GitHub 저장소를 연결했으니, 내 PC에 있는 커밋 기록을 GitHub로 올려보자. 이 작업을 push라고 한다.

먼저 현재 브랜치 이름을 확인한다.

git branch

출력 결과에서 아래처럼 표시되면 현재 main 브랜치에 있다는 뜻이다.

git branch 출력 결과

만약 현재 브랜치 이름이 master로 되어 있다면 아래 명령어로 main으로 바꿀 수 있다.

git branch -M main

이제 첫 push를 실행한다.

git push -u origin main

이 명령어는 처음 보면 길어 보이지만, 나누어 보면 어렵지 않다.

git push: 로컬 저장소의 커밋을 원격 저장소로 올린다.
-u: 앞으로 현재 브랜치가 어느 원격 브랜치와 연결되는지 기억하게 한다.
origin: 앞에서 등록한 GitHub 원격 저장소의 별명이다.
main: 로컬의 main 브랜치를 원격 저장소의 main 브랜치로 올린다는 뜻이다.

즉, git push -u origin main은 내 PC의 main 브랜치를 GitHub의 origin 원격 저장소에 올리고, 앞으로 이 둘을 기본 연결 관계로 기억하라는 뜻이다.

처음 push할 때는 환경에 따라 GitHub 로그인을 요구할 수 있다. Windows에서 Git for Windows를 사용하고 HTTPS 주소로 연결했다면 Connect to GitHub 창이 열릴 수 있다. 이때 브라우저에서 GitHub 계정으로 로그인하고 권한을 허용하면 된다.

아래와 같이 뜨면 성공적으로 push된 것이다.

git push -u origin main 실행

GitHub 저장소 페이지를 새로고침했을 때, 1편에서 만들었던 파일과 커밋 기록이 보일 것이다.

GitHub Repository
GitHub Commits

push 이후부터는 -u origin main을 매번 붙이지 않아도 된다.

git push

처음 한 번만 git push -u origin main으로 연결해두면, 이후에는 git push만 입력해도 현재 브랜치의 커밋을 연결된 GitHub 브랜치로 올릴 수 있다.

5. 수정 후 다시 GitHub에 올리기

push가 끝났다면, 이제 평소 작업 흐름은 단순하다. 로컬에서 파일을 수정하고, 커밋을 만든 뒤, 그 커밋을 GitHub로 push하면 된다.

예를 들어 hello.txt 파일에 한 줄을 더 추가했다고 가정해 보자. 이때 흐름은 다음과 같다.

git status
git diff
git add hello.txt
git commit -m "hello.txt 내용 추가"
git push

1편에서 배운 로컬 Git 흐름에 마지막 git push만 추가된 것이다.

각 명령어의 역할을 다시 보면 다음과 같다.

  • git status: 현재 파일 상태를 확인한다.
  • git diff: 어떤 내용이 수정되었는지 확인한다.
  • git add hello.txt: 수정한 파일을 스테이징 영역에 올린다.
  • git commit -m "hello.txt 내용 추가": 커밋 기록을 만든다.
  • git push: 새로 만든 커밋을 GitHub에 올린다.

Git 사용 경험이 극히 적은 사람 입장에서는 git push를 단순히 파일 업로드 버튼처럼 생각하기 쉽다. 하지만 정확히는 파일 자체를 그냥 올리는 것이 아니라, 내 로컬 저장소에 만들어진 커밋 기록을 원격 저장소로 보내는 것이다.

따라서 GitHub에 올리고 싶다면 먼저 로컬에서 커밋이 만들어져 있어야 한다.
즉, 아래처럼 git add만 하고 바로 push하는 것은 올바른 흐름이 아니다.

# 잘못된 사용법
git add hello.txt
git push

push는 커밋을 올리는 명령어이므로, push 전에 commit이 있어야 한다.
올바른 흐름은 다음과 같다.

git add hello.txt
git commit -m "hello.txt 내용 추가"
git push

6. GitHub의 변경 내용을 내 PC로 가져오기

이번에는 반대 방향을 생각해 보자.

GitHub에 있는 변경 내용을 내 PC로 가져와야 할 때가 있다.

예를 들면 다음과 같은 상황이다.

  • 집 PC에서 작업한 뒤 GitHub에 올렸다.
  • 학교나 회사 PC에서 이어서 작업해야 한다.
  • 팀원이 GitHub에 새 커밋을 올렸다.
  • GitHub 웹사이트에서 README 파일을 수정했다.

이때 사용하는 명령어가 git pull이다.

git pull

git pull은 GitHub 원격 저장소에 있는 최신 커밋을 내 로컬 저장소로 가져와서 현재 브랜치에 반영한다.

쉽게 말하면 pushpull의 방향은 반대다.

내 PC -- git push --> GitHub
내 PC <-- git pull -- GitHub

push는 내 PC에서 GitHub로 올리는 것이다.
pull은 GitHub에서 내 PC로 가져오는 것이다.

실제 작업에서는 파일을 수정하기 전에 먼저 git pull을 실행하는 습관이 좋다.

git pull
git status

특히 여러 사람이 함께 작업하는 프로젝트에서는 내가 작업하기 전에 이미 누군가가 GitHub에 새 커밋을 올려두었을 수 있다.

이 상태에서 내 PC가 최신 상태가 아닌데 바로 수정하고 push하려고 하면, push가 거절될 수 있다. 그래서 협업할 때는 작업을 시작하기 전, 내 작업 폴더가 깨끗한 상태인지 git status로 확인한 뒤 git pull로 최신 변경 내용을 가져오는 습관이 좋다.

7. git fetch와 git pull의 차이

git pull과 함께 자주 나오는 명령어가 git fetch다.

둘 다 원격 저장소의 정보를 가져오는 명령어라서 처음에는 헷갈릴 수 있다. 차이를 간단히 말하면 다음과 같다.

  • git fetch: 원격 저장소의 최신 정보를 가져오기만 한다. 내 작업 파일에는 바로 반영하지 않는다.
  • git pull: 원격 저장소의 최신 정보를 가져오고, 현재 브랜치에 바로 반영한다.

비유하면 git fetch는 택배가 왔는지 확인만 하는 것이고, git pull은 택배를 확인한 뒤 바로 상자를 열어서 내 창고 🏢(Local Repository), 책상 🪑(Working Directory)에 반영하는 것과 비슷하다.

원격 저장소에 새 커밋이 있는지 먼저 확인하고 싶다면 아래처럼 사용할 수 있다.

git fetch

그다음 내 로컬 main에는 아직 없고, 원격 저장소의 origin/main에는 있는 커밋을 확인하려면 아래 명령어를 사용할 수 있다.

git log --oneline main..origin/main
  • main..origin/main: 두 브랜치 사이의 커밋 차이점을 보여준다.
  • .. 문법은 A를 제외하고 B에는 있는 커밋을 의미한다.
  • 따라서 main..origin/main내 로컬의 main에는 없고, 원격의 origin/main에만 있는 커밋을 찾겠다는 뜻이다.
  • 이는 주로 원격 저장소의 내용을 내 로컬로 가져오기 전(pull하기 전), 어떤 변경 사항들이 업데이트될지 미리 확인할 때 매우 유용하게 쓰인다.

반대로 로컬에는 있지만 아직 원격 저장소에는 올리지 않은 커밋이 무엇인지 확인하고 싶다면, 순서를 바꿔서 아래와 같이 입력하면 된다.

git log --oneline origin/main..main

처음 Git을 배우는 단계에서는 보통 git pull을 먼저 익히면 충분하다.

다만 나중에 협업 프로젝트를 하게 되면, 원격 변경 사항을 바로 합치기 전에 git fetch로 먼저 확인하는 습관도 도움이 된다.

8. 다른 PC에서 GitHub 저장소 가져오기: git clone

이번에는 이미 GitHub에 올라와 있는 저장소를 다른 PC로 가져오는 방법을 알아보자.

이때 사용하는 명령어가 git clone이다.

git clone은 원격 저장소를 내 PC에 새 폴더로 복사해 온다. 단순히 파일만 다운로드하는 것이 아니라, Git 커밋 기록과 원격 저장소 연결 정보까지 함께 가져온다.

예를 들어 GitHub 저장소 주소가 아래와 같다고 하자.
https://github.com/사용자명/git-practice.git

이 저장소를 내 PC로 가져오려면 원하는 위치에서 아래 명령어를 입력한다.

git clone https://github.com/사용자명/git-practice.git

명령어를 실행하면 현재 위치에 git-practice 폴더가 만들어지고, 그 안에 GitHub 저장소의 파일과 Git 기록이 내려받아진다.

폴더 안으로 이동한 뒤 원격 저장소 연결 상태를 확인해 보자.

cd git-practice
git remote -v

git clone으로 가져온 저장소는 보통 원격 저장소 이름이 자동으로 origin으로 설정되어 있다.

그래서 clone으로 가져온 저장소에서는 별도로 git remote add origin https://github.com/사용자명/git-practice.git 명령어를 다시 입력할 필요가 없다.

정리하면 다음과 같다.

이미 내 PC에 로컬 저장소가 있고, 이것을 GitHub와 연결하려면 git remote add origin을 사용한다.

GitHub에 있는 저장소를 새 PC로 처음 가져오려면 git clone을 사용한다.

9. 기초 브랜치 작업 맛보기

지금까지는 계속 main 브랜치에서 작업했다.

개인 연습 프로젝트라면 main 브랜치 하나만으로도 충분하다. 하지만 협업 프로젝트에서는 기능을 만들거나 실험할 때 별도의 브랜치를 만들어 작업하는 경우가 많다.

브랜치는 작업 흐름을 나누는 갈래라고 생각하면 된다.

예를 들어 main 브랜치는 안정적인 기본 줄기로 두고, 새로운 기능은 별도 브랜치에서 작업할 수 있다.

새 브랜치를 만들고 이동하려면 아래 명령어를 사용할 수 있다.

git switch -c practice-branch

이 명령어는 practice-branch라는 새 브랜치(-c 플래그)를 만들고, 동시에 그 브랜치로 이동한다는 뜻이다.

현재 브랜치를 확인하려면 아래 명령어를 입력한다.

git branch

출력 결과에서 별표(*)가 붙어 있는 브랜치가 현재 작업 중인 브랜치다.

git branch 명령어 실행 결과
  main
* practice-branch

이제 practice-branch에서 파일을 수정하고 커밋할 수 있다.

git status
git add 파일명
git commit -m "practice 브랜치에서 파일 수정"

이 브랜치를 GitHub에도 올리려면 아래처럼 입력한다.

git push -u origin practice-branch

그러면 GitHub에도 practice-branch라는 브랜치가 만들어진다.

실제 협업에서는 이 브랜치에서 작업한 내용을 바로 main에 합치지 않고, GitHub에서 Pull Request를 만들어 검토한 뒤 합치는 경우가 많다.

다만 Pull Request, merge, conflict 해결은 내용이 길어질 수 있으므로 별도의 글에서 더 자세히 다룰 예정이다.

이번 글에서는 브랜치는 main과 분리된 작업 줄기이고, 브랜치도 GitHub에 push할 수 있다는 정도만 이해하면 충분하다.

10. 전체 명령어 요약

이번 글에서는 로컬 Git 저장소를 GitHub 원격 저장소와 연결하고, 커밋을 올리고 가져오는 기본 흐름을 정리했다.

가장 기본적인 GitHub 업로드 흐름은 다음과 같다.

# 최초 1회: 원격 저장소 연결
git remote add origin https://github.com/사용자명/git-practice.git
# 최초 1회: main 브랜치를 GitHub에 올리기
git push -u origin main
# 이후 일반 작업 흐름
git status
git diff
git add 파일명
git commit -m "커밋 메시지"
git push

GitHub의 변경 내용을 내 PC로 가져올 때는 다음 명령어를 사용한다.

git pull

GitHub 저장소를 다른 PC로 처음 가져올 때는 다음 명령어를 사용한다.

git clone https://github.com/사용자명/git-practice.git

각 명령어의 역할을 정리하면 다음과 같다.

상황: 원격 저장소 연결
명령어: git remote add origin URL (e.g. git remote add origin https://github.com/사용자명/git-practice.git)
의미: 로컬 저장소에 GitHub 저장소 주소를 등록한다.

상황: 원격 저장소 확인
명령어: git remote -v
의미: 현재 연결된 원격 저장소 주소를 확인한다.

상황: 현재 브랜치 확인
명령어: git branch
의미: 현재 작업 중인 브랜치와 브랜치 목록을 확인한다.

상황: 브랜치 이름 변경
명령어: git branch -M main
의미: 현재 브랜치 이름을 main으로 바꾼다.

상황: 첫 push
명령어: git push -u origin main
의미: main 브랜치를 GitHub에 올리고, 이후 pushpull 기본 연결을 설정한다.

상황: 이후 push
명령어: git push
의미: 로컬 커밋을 GitHub 원격 저장소로 올린다.

상황: 원격 변경 가져오기
명령어: git pull
의미: GitHub의 최신 변경 내용을 내 PC로 가져와 현재 브랜치에 반영한다.

상황: 원격 변경 확인
명령어: git fetch
의미: GitHub의 최신 정보를 가져오기만 하고, 작업 파일에는 바로 반영하지 않는다.

상황: 저장소 복제
명령어: git clone URL (e.g. git clone https://github.com/사용자명/git-practice.git)
의미: GitHub 저장소를 내 PC에 새 폴더로 가져온다.

상황: 새 브랜치 생성 및 이동
명령어: git switch -c 브랜치명
의미: 새 브랜치를 만들고 그 브랜치로 이동한다.

상황: 새 브랜치 push
명령어: git push -u origin 브랜치명
의미: 로컬 브랜치를 GitHub 원격 저장소에 새 브랜치로 올린다.

정리하면, 1편의 핵심이 내 PC 안에서 커밋을 만드는 방법이었다면, 이번 2편의 핵심은 그 커밋을 원격 저장소인 GitHub와 주고받는 방법이다.

처음에는 명령어가 많아 보일 수 있지만, 실제로 자주 쓰는 흐름은 단순하다.

작업하기 전에는 먼저 GitHub의 최신 내용을 가져온다.

git pull

작업한 뒤에는 수정 내용을 확인하고 커밋한 다음 GitHub에 올린다.

git status
git diff
git add 파일명
git commit -m "커밋 메시지"
git push

즉, 기본 흐름은 다음과 같이 기억하면 된다.

git pull
# 작업하기
git add 파일명
git commit -m "커밋 메시지"
git push

다음 글에서는 GitHub에서 브랜치를 활용해 협업하는 방법, Pull Request의 의미, merge 과정, 그리고 충돌(conflict)이 발생했을 때 어떻게 해결하는지 정리할 예정이다.

Join the conversation

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다