Git & GitHub 핵심 정리
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는 원격 저장소 서비스이다.
commit은 GitHub가 아니라 Local Repository에 저장하는 작업이다.push를 해야 비로소 GitHub에 업로드된다.작업 전에는
git pull을 통해 최신 코드를 받아오는 습관이 중요하다.기능 개발은
main이 아닌 브랜치에서 진행한다.원격 브랜치가 없다면
git push -u origin <브랜치명>으로 생성하고 연결한다.
정리하면서 저도 개념이 더 선명해졌습니다. 피드백은 언제나 환영합니다.
