본문 바로가기
Deployment/GitHub

Git 기본 사용법 (CLI)

by curious week 2025. 4. 9.

Git을 사용하여 로컬 프로젝트를 초기화하고, GitHub에 파일을 업로드

  1. git init - 로컬 프로젝트에서 Git 초기화
  2. git add . - 모든 파일을 스테이지에 추가
  3. git commit -m "메시지" - 커밋
  4. git remote add origin <URL> - 원격 저장소 연결
  5. git push -u origin main - GitHub에 푸시

1. Git 저장소 초기화 (git init)

로컬 프로젝트에서 Git을 사용하려면 먼저 Git 저장소를 초기화해야 합니다. 프로젝트 폴더 내에서 다음 명령어를 실행합니다:

git init

이 명령어는 .git 디렉토리를 생성하여, 해당 폴더를 Git 저장소로 변환합니다.

2. 파일 스테이징 (git add)

Git에 변경된 파일을 추가하려면 git add 명령어를 사용하여 파일을 스테이지 상태로 만들어야 합니다. 모든 파일을 추가하려면:

git add .

특정 파일만 추가하려면 파일 이름을 지정합니다:

git add 파일이름

3. 첫 번째 커밋 (git commit)

스테이지에 올린 파일을 커밋하려면 git commit 명령어를 사용합니다. -m 옵션으로 커밋 메시지를 작성할 수 있습니다.

git commit -m "첫 번째 커밋 메시지"

4. GitHub 원격 저장소 연결

GitHub에 리포지토리를 만들고 원격 저장소를 추가해야 합니다.

  1. GitHub에서 새 리포지토리를 생성합니다.
  2. 생성된 리포지토리에서 "Quick setup" 부분에 있는 URL을 복사합니다.

원격 저장소를 추가하려면 다음 명령어를 실행합니다:

git remote add origin https://github.com/사용자이름/리포지토리이름.git

예시:

git remote add origin https://github.com/johndoe/my-repository.git

5. 파일을 GitHub에 푸시 (git push)

원격 저장소를 추가한 후, 로컬 변경 사항을 GitHub에 푸시합니다. -u 옵션은 첫 번째 푸시에서만 원격 저장소의 브랜치를 추적하도록 설정합니다.

git push -u origin master

만약 기본 브랜치가 main인 경우, 아래와 같이 푸시합니다:

git push -u origin main

이 명령어는 로컬의 master(또는 main) 브랜치를 GitHub의 원격 저장소에 푸시합니다.

6. 푸시할 때마다 git push 사용

이후 변경 사항을 푸시할 때는 git push만 입력하면 됩니다:

git push

7. GitHub에 업로드된 파일 확인

GitHub 웹사이트에 로그인하여 리포지토리 페이지로 이동하면, 업로드된 파일을 확인할 수 있습니다.


1. 새로운 브랜치 만들기

git branch 브랜치이름

예를 들어, feature-xyz라는 이름의 브랜치를 만들고 싶다면:

git branch feature-xyz

이 명령어는 새로운 브랜치를 만들지만, 해당 브랜치로 전환하지는 않습니다. 단지 브랜치만 생성됩니다.

2. 새 브랜치로 전환하기

새 브랜치를 만든 후, 해당 브랜치로 전환하려면 git checkout을 사용합니다:

git checkout 브랜치이름

예를 들어, feature-xyz 브랜치로 전환하려면:

git checkout feature-xyz

3. 브랜치 만들고 바로 전환하기

브랜치를 만들고 바로 전환하려면 -b 옵션을 사용할 수 있습니다:

git checkout -b 브랜치이름

예를 들어, feature-xyz라는 브랜치를 만들고 바로 전환하려면:

git checkout -b feature-xyz

4. git switch 명령어 사용하기 (Git 2.23 이상)

Git 2.23 이상에서는 git switch 명령어를 사용하여 브랜치를 만들고 전환할 수 있습니다. 이 명령어는 checkout을 좀 더 직관적으로 사용할 수 있게 도와줍니다.

  • 브랜치 만들고 전환하기:
git switch -c 브랜치이름

예를 들어, feature-xyz라는 브랜치를 만들고 바로 전환하려면:

git switch -c feature-xyz

이렇게 하면 새 브랜치를 만들고, 동시에 그 브랜치로 전환됩니다.


 

 

1) 큰 지도(멘탈 모델)

  • 원격(Remote): 보통 origin이라는 이름으로 GitHub 같은 서버 연결.
  • 원격 트래킹 브랜치: origin/main 처럼 “원격 상태를 로컬에 캐시한 포인터” (읽기 전용).
  • 로컬 브랜치: main, feature/foo 같은 네 작업 브랜치.
  • 업스트림(upstream): 로컬 브랜치가 기본적으로 비교/동기화할 원격 브랜치. 보통 main ↔ origin/main.

2) Remotes (원격 관련)

가장 자주 쓰는 것

git remote -v                            # 원격 목록/URL 보기
git remote add origin <URL>              # 원격 추가
git remote remove origin                 # 원격 제거
git remote rename origin upstream        # 원격 이름 변경
git remote set-url origin <NEW_URL>      # 원격 URL 변경(https ↔ ssh 등)

언제 쓰나?

  • 새 저장소에 GitHub 연결할 때: remote add.
  • HTTPS → SSH 전환, 레포 이동: remote set-url.
  • 포크/원본 둘 다 쓰고 싶을 때: origin, upstream 두 개 두고 관리.

3) fetch · pull · push 차이

fetch

git fetch origin              # 원격의 최신 커밋들만 가져와서 origin/* 갱신, 내 작업트리/로컬브랜치는 그대로
git fetch --all               # 모든 원격 갱신
  • 언제? 원격 최신 상태를 로컬에 반영만 하고 싶을 때(병합/리베이스는 나중에 내가 결정).

pull = fetch + (merge 또는 rebase)

git pull origin main                  # fetch 후 자동 merge
git pull --rebase origin main         # fetch 후 내 커밋을 origin/main 위로 rebase (히스토리 깔끔)
git config pull.rebase true           # 앞으로 pull은 기본 rebase로
  • 언제? “원격 변화와 내 작업을 합치고 싶다.”
  • 팀에서 선호에 따라 merge 또는 rebase 선택.

push

git push -u origin main               # 원격으로 올리기(+ upstream 설정)
git push                              # upstream 설정돼 있으면 간단히 push
git push --force-with-lease           # (주의) 강제 푸시. 언제나 with-lease 사용
  • 언제? 내 로컬 커밋을 원격 브랜치에 반영.
  • “non-fast-forward” 에러 나면, 먼저 fetch/pull로 통합하는 게 정석.

4) branch · switch · checkout (브랜치 작업)

브랜치 명령들

git branch                             # 로컬 브랜치 목록
git branch -vv                         # 업스트림 정보까지
git branch -m old new                  # 브랜치 이름 변경
git branch --set-upstream-to=origin/main  main   # 업스트림 수동 설정

브랜치 이동/생성

git switch main                        # 브랜치로 전환
git switch -c feature/login            # 새 브랜치 만들고 전환
# (구문 참고) git checkout main / git checkout -b feature/login 도 같지만,
#  요즘은 switch를 권장

언제 쓰나?

  • 새 작업 시작: git switch -c feature/…
  • 메인으로 돌아오기: git switch main
  • 업스트림 설정 필요할 때: git branch --set-upstream-to=…

5) merge vs rebase (통합 전략)

merge

git switch main
git merge feature/login       # 머지 커밋 생성(비선형), 충돌나면 해결 후 커밋
  • 장점: 안전, 공개 이력 보존.
  • 단점: 머지 커밋이 많아지면 그래프가 복잡.

rebase

git switch feature/login
git rebase main               # feature의 커밋들을 main 위에 “재적용”
# 충돌 해결 후:
git add <files>
git rebase --continue
  • 장점: 이력이 일자형으로 깔끔. 리뷰/탐색 용이.
  • 주의: 공유된 브랜치(이미 푸시/공유) rebase 금지. 로컬에서만, 아니면 강제 푸시 필요.

언제 뭘 쓰나?

  • 팀 합의 없이 안전하게: merge.
  • 개인 작업 깔끔히 정리해서 올리기 전: rebase 후 push.
  • git pull --rebase를 습관화하면 불필요한 merge 커밋 줄어듦.

6) 자주 겪는 시나리오와 정확한 해법

A) “non-fast-forward”로 push가 거절될 때(로컬이 뒤처짐)

git fetch origin
git rebase origin/main        # 또는 git merge origin/main
# 충돌 해결 → add → rebase --continue (or merge commit)
git push

B) 새 로컬 repo 초기화 → GitHub에 첫 푸시

git init
git add .
git commit -m "Initial commit"
git branch -M main
git remote add origin <URL>
git push -u origin main

C) 원격에 이미 초기 커밋(README 등)이 있어서 “unrelated histories”

git fetch origin
git switch -c main 2>/dev/null || git switch main
git pull origin main --allow-unrelated-histories
# 충돌 해결 후 커밋
git push

D) 실수로 잘못 커밋(메시지 수정/내용 추가)

git commit --amend            # 직전 커밋 수정(메시지/스테이지 포함)
# 이미 푸시했다면 —force-with-lease 필요(주의)

E) 로컬에서만 되돌리고 싶다(reset) vs 공개 이력 유지(revert)

  • reset(히스토리 재작성, 로컬에서 과감히 되돌림)
git reset --soft HEAD~1       # 커밋만 되돌리고 변경은 스테이징 상태 유지
git reset --mixed HEAD~1      # (기본) 스테이징 해제
git reset --hard HEAD~1       # 변경까지 완전 삭제(주의)
  • revert(안전하게 “되돌리는 커밋”을 새로 만들어서 공개 이력 유지)
git revert <commit_sha>

F) 임시로 변경사항 치워두기(stash)

git stash push -m "wip: hero gsap"
git switch main
git stash list
git stash apply  stash@{0}

G) 특정 커밋만 따오고 싶다(cherry-pick)

git cherry-pick <commit_sha>

H) 복구가 필요할 때(reflog)

git reflog                     # HEAD 이동 기록
git reset --hard HEAD@{3}      # 3단계 전 상태로 되돌림(위험, 조심)

7) 업스트림/푸시 기본 설정 팁

업스트림 한 번에 잡기:

git push -u origin main

이후에는 그냥:

git push
git pull --rebase

기본 동작을 깔끔히:

git config --global pull.rebase true          # pull 시 rebase 기본
git config --global push.default simple       # 현재 브랜치를 동일 이름으로 푸시

8) 실전 습관(추천 워크플로우)

  1. 작업 시작 전 항상 원격 갱신
git fetch origin
git switch main
git pull --rebase
  1. 작업 브랜치 생성
git switch -c feature/bubbles-perf
  1. 커밋/푸시
git add -A
git commit -m "Improve bubbles perf with instancing"
git push -u origin feature/bubbles-perf
  1. PR 만들기 → 리뷰 → 머지(팀 규칙에 따라 merge/rebase/squash)
  2. 로컬 메인 갱신
git switch main
git pull --rebase
git branch -d feature/bubbles-perf

 

'Deployment > GitHub' 카테고리의 다른 글

Github Actions  (1) 2026.05.05
Learn Git Branching (2) remote  (0) 2026.05.01
GitHub Skills  (0) 2026.04.30
Learn Git Branching (1) main  (0) 2026.04.30
버전 관리와 깃(Git)  (0) 2025.12.01