Skip to main content

Command Palette

Search for a command to run...

Git & GitHub 핵심 정리

Updated
5 min readView as Markdown

Git은 명령어를 외우는 것이 아니라 로컬(Local)과 원격(Remote)이 어떻게 상호작용하는지 이해하는 것이 가장 중요하다.


Git이란?

  • Git : 버전 관리 시스템(VCS)

  • GitHub : Git 저장소를 온라인에서 관리하고 협업하기 위한 서비스

쉽게 말하면

Git      = 버전 관리 프로그램

GitHub   = Git 저장소를 올려두는 클라우드

Git의 전체 구조

                  Git

        내 컴퓨터(Local)

 ┌──────────────────────────┐
 │                          │
 │   Working Directory      │
 │     (작업 공간)           │
 │                          │
 └──────────────────────────┘
              │
          git add
              │
              ▼
 ┌──────────────────────────┐
 │      Staging Area        │
 │   (커밋할 파일 선택)       │
 └──────────────────────────┘
              │
        git commit
              │
              ▼
 ┌──────────────────────────┐
 │    Local Repository      │
 │      (.git 폴더)         │
 └──────────────────────────┘
              │
         git push
              │
              ▼
================================== Internet
              │
              ▼
 ┌──────────────────────────┐
 │    Remote Repository     │
 │        GitHub            │
 └──────────────────────────┘

여기서 가장 중요한 것은

commit은 GitHub에 저장하는 것이 아니라 Local Repository에 저장하는 것이다.


기본 작업 흐름

평소 개발할 때는 거의 항상 아래 순서를 반복한다.

코드 수정
     │
     ▼
git status
     │
     ▼
git add .
     │
     ▼
git commit
     │
     ▼
git push

GitHub에서 프로젝트 가져오기

처음 프로젝트를 시작할 때

git clone https://github.com/user/project.git

동작 과정은

GitHub
   │
git clone
   │
   ▼
내 컴퓨터(Local)

프로젝트 전체가 복사된다.


GitHub 최신 코드 가져오기

협업에서는 작업 전에 항상

git pull

을 실행하는 습관이 중요하다.

GitHub
    │
git pull
    │
    ▼
Local

최신 코드가 내려온다.


브랜치(Branch)

브랜치는 독립된 개발 공간이다.

예를 들어 로그인 기능을 개발한다고 하면

main
 │
 ├───────────────
 │
 ▼
feature/login

브랜치를 생성한다.

git switch -c feature/login

또는

git checkout -b feature/login

왜 브랜치를 사용할까?

만약 모든 사람이 main에서 개발하면

main

A 작업

B 작업

C 작업

D 작업

서로 충돌이 자주 발생한다.

그래서

             main

        /      |      \

 login   payment   chat

처럼 기능마다 브랜치를 만든다.


로컬 브랜치와 원격 브랜치

예를 들어

Local

main

feature/login

GitHub

main

GitHub에는 아직 브랜치가 없다.

이 상태에서

git push

를 하면

fatal:
The current branch feature/login
has no upstream branch.

오류가 발생한다.

왜냐하면

Local

feature/login

      ?

Remote

(없음)

Git이 연결할 브랜치를 모르기 때문이다.


원격 브랜치 생성

처음 한 번만

git push -u origin feature/login

을 실행하면

Local

feature/login
      │
      │
      ▼
Remote

feature/login

원격 브랜치가 생성된다.

그리고 앞으로는

git push

만 입력하면 된다.


브랜치 병합(Merge)

기능 개발 완료

main

│

├────────── feature/login

git switch main
git merge feature/login

main
(로그인 기능 포함)

실무에서는 직접 merge보다

feature/login

        │

        ▼

 Pull Request

        │

        ▼

      main

방식을 가장 많이 사용한다.


협업 시나리오

① 작업 시작

git pull

최신 코드 받기


② 브랜치 생성

git switch -c feature/login

③ 개발

코드 작성

④ 저장

git add .

git commit -m "Login"

⑤ GitHub 업로드

git push -u origin feature/login

⑥ Pull Request 생성

GitHub에서

feature/login

↓

main

으로 PR 생성


⑦ 코드 리뷰

리뷰 후 Merge

main 업데이트

git pull

다음 작업 시작


Merge Conflict

예를 들어

A

login.js

10번째 줄 수정

B

login.js

10번째 줄 수정

둘 다 수정하면

git pull

<<<<<<< HEAD

내 코드

=======

상대 코드

>>>>>>> origin/main

처럼 표시된다.

직접 수정 후

git add .

git commit

git push

하면 충돌이 해결된다.


Git 주요 명령어

명령어 설명
git clone 프로젝트 복사
git status 상태 확인
git add . 변경 파일 추가
git commit -m "" 로컬 저장
git push GitHub 업로드
git pull 최신 코드 가져오기
git branch 브랜치 목록
git switch 브랜치 이동
git merge 브랜치 병합
git log --oneline 커밋 기록

Git 전체 흐름 한 장으로 보기

GitHub에서 프로젝트 받기
            │
            ▼
       git clone
            │
            ▼
      Local Repository
            │
       코드 수정
            │
            ▼
        git add
            │
            ▼
      git commit
            │
            ▼
        git push
            │
            ▼
         GitHub
            │
     Pull Request
            │
            ▼
          Merge
            │
            ▼
       git pull
            │
      다음 작업 시작

핵심 요약

  • Git은 버전 관리 시스템, GitHub는 원격 저장소 서비스이다.

  • commitGitHub가 아니라 Local Repository에 저장하는 작업이다.

  • push를 해야 비로소 GitHub에 업로드된다.

  • 작업 전에는 git pull을 통해 최신 코드를 받아오는 습관이 중요하다.

  • 기능 개발은 main이 아닌 브랜치에서 진행한다.

  • 원격 브랜치가 없다면 git push -u origin <브랜치명>으로 생성하고 연결한다.


정리하면서 저도 개념이 더 선명해졌습니다. 피드백은 언제나 환영합니다.

8 views