초보자를 위한 Git & Github 필수 명령어 가이드
개발자의 필수 덕목 Git & Github의 A to Z
2026.03.19
GitGithubProgrammingSCM
0. 개념 정리
- Git: 로컬에서 코드(파일)의 버전을 관리하는 도구.
- GitHub: Git으로 관리한 코드를 온라인에 올려서 협업·공유하는 서비스.
- 브랜치(branch): “분기된 작업공간”처럼, 다른 기능을 동시에 개발할 수 있게 해 주는 것.
- 커밋(commit): 한 번의 저장 단위. “어떤 때 어떤 내용을 수정했는지”가 기록됨.
- 원격 저장소(remote): GitHub, GitLab 같은 서비스에 있는 저장소. 로컬과 동기화.
1. GitHub 계정 만들기
- 브라우저에서 접속
- https://github.com 에 접속.
- 가입하기
Sign up→ 이메일, 비밀번호, 사용자 이름(예:myname123) 입력 →Continue→ 인증 후Finish sign up.
- 로그인 상태 유지
- 로그인 후에는
Signed in as 사용자명이 우측 상단에 보여야 함.
- 로그인 후에는
2. Git 설치 (로컬)
Git은 로컬에 설치해야 터미널에서 git add, git commit 같은 명령을 쓸 수 있음.
- Windows
- https://git-scm.com 에서
Downloads→ Windows 설치 파일 다운로드. - 설치 파일 실행 → 기본값으로 계속 Next만 누르고 설치.
- macOS
brew install git(터미널에서)- 또는 위 사이트에서 macOS 설치 파일 다운로드.
설치 후 터미널(또는 Command Prompt)에서 확인:
bashgit --version
- 예:
git version 2.40.0처럼 나오면 설치 성공.
3. Git 기본 설정 (이름·이메일)
깃은 “누가 커밋했는지”를 기록하기 위해 이름·이메일을 설정해야 함.
bashgit config --global user.name "자신의이름"
git config --global user.email "이메일@example.com"
- 예:
bashgit config --global user.name "KimDeveloper"
git config --global user.email "kim@example.com"
--global은 전역 설정이라 한 번만 하면 됨.
4. GitHub과 SSH/HTTPS 연결 설정 (선택)
Push/Pull할 때 계정 인증을 두 방식 중 하나로 설정:
4‑1. HTTPS 방식 (초보 추천)
- 그냥
git push시에 GitHub 비밀번호(또는 Personal Access Token)를 물어봄. - 별도로 아무 설정 안 하고 바로
git clone→git push가능.
4‑2. SSH 키 방식 (한 번 세팅하면 비번 안 침)
- 터미널에서 SSH 키 생성:
bashssh-keygen -t rsa -b 4096 -C "이메일@example.com"
Enter만 두 번 눌러 기본 경로(~/.ssh/id_rsa) 사용.
- 공개키 내용 확인:
bashcat ~/.ssh/id_rsa.pub
- 터미널에 출력되는 내용을 복사.
- GitHub 설정에서 SSH 키 등록
- GitHub → 우측 상단 프로필 →
Settings→SSH and GPG keys→New SSH key - Title:
my laptop - Key: 방금 복사한
ssh-rsa ...전체 붙여넣기 →Add SSH key.
- GitHub → 우측 상단 프로필 →
- 연결 테스트
bashssh -T git@github.com
Hi 사용자명! You've successfully authenticated...메시지 나오면 OK.
5. 첫 번째 Git 프로젝트 만들기
5‑1. 로컬 폴더 만들기
예: hello-git 폴더 만듦
bashmkdir hello-git
cd hello-git
5‑2. Git 저장소 초기화
bashgit init
- 이 폴더를 Git 저장소로 만듬.
1. Git 기본 사용 흐름
1‑1. 로컬 저장소 준비
- 새 프로젝트 폴더에서:
bashgit init
- 이 폴더를 Git 저장소로 만듦.
- 이미 GitHub에 있는 저장소를 복사할 때:
bashgit clone https://github.com/사용자/프로젝트.git
1‑2. 기본 작업 순서
- 변경 감지
bashgit status
- 어떤 파일이 수정·추가됐는지 확인.
- 변경 선택 (Staging)
bashgit add 파일명
git add .
git add .은 현재 폴더의 모든 변경을 커밋 대기 영역에 올림.
- 이력 저장 (커밋)
bashgit commit -m "이번에 뭐 고쳤는지 설명"
- 예:
git commit -m "로그인 기능 추가"
- 원격 저장소에 올리기 (push)
bashgit push origin main
main대신master같은 브랜치가 쓰일 수도 있음.
- 다른 사람 변경 받아오기 (pull)
bashgit pull origin main
- 협업할 때는
git add·git commit전에 이걸 먼저 해 주는 게 좋음.
1‑3. VS Code에서 쓰는 느낌
- 상단
Source Control아이콘(깃 모양) 클릭. - 변경된 파일에
+눌러 Staging →Commit버튼으로 커밋 → - 상단
...→Push/Pull로 동기화.
2. 브랜치 만드는 법
2‑1. 로컬에 브랜치 생성
- 현재 브랜치 기준으로 새 브랜치를 만들기만:
bashgit branch feature-login
- 이 명령만 치면 브랜치는 생기지만, 아직 그 브랜치로 이동하지 않음.
2‑2. 생성 + 동시에 이동
- 보통 이렇게 씀:
bashgit checkout -b feature-login
feature-login브랜치 생성 + 바로 그 브랜치로 전환.git branch명령으로 보면 현재 브랜치 위에*가 붙어 있는지 확인 가능.
2‑3. VS Code에서 브랜치 만들기
- 하단 상태바에 브랜치 이름(
main같은 것) 클릭 → Create new branch…→ 이름 입력 → Enter- 브랜치 생성 + 자동으로 그 브랜치로 이동.
3. 브랜치 병합 및 삭제
3‑1. merge로 병합
- 기본 브랜치로 이동 (예:
main):
bashgit checkout main
- 작업 브랜치를
main에 병합:
bashgit merge feature-login
feature-login의 커밋이main에 합쳐짐.- 충돌이 나면 파일을 열고 수정 →
git add→git commit으로 마무리.
3‑2. 병합 후 브랜치 삭제
- 로컬에서 삭제 (안전)
bashgit branch -d feature-login
- 이미 병합된 브랜치인 경우만 삭제됨.
- 아직 병합되지 않으면 에러가 나서 실수 방지.
- 강제 삭제
bashgit branch -D feature-login
- 병합 여부 상관없이 바로 삭제.
- 원격 저장소(예: GitHub)에서 삭제
bashgit push origin --delete feature-login
3‑3. 한 번에 정리 예시
bashgit checkout main
git merge feature-login
git push origin main
git branch -d feature-login
git push origin --delete feature-login
- “병합 → 로컬·원격 브랜치 삭제”까지 한 번에 정리.
4. rebase로 병합하는 고급 흐름
4‑1. merge vs rebase 개념
merge- 브랜치를 그대로 합쳐서, 병합 커밋(merge commit) 을 하나 만듦.
- 히스토리에 브랜치가 갈라지고 다시 합쳐진 흔적이 남음. 협업용으로 많이 씀.
rebase- 브랜치의 커밋들을 기준 브랜치 끝에 다시 쌓아서 선형으로 정리.
- 병합 커밋이 없어서 히스토리가 더 깔끔해 보임.
- 하지만 커밋 ID가 새로 만들어져서, 이미 푸시된 브랜치를 여러 사람이 공유 중이면 남이랑 충돌 날 수 있음.
4‑2. 기본 rebase 흐름 예시
예: feature-login 브랜치를 main 끝에 정리해서 합치기
- 기능 브랜치로 이동:
bashgit checkout feature-login
main기준으로 리베이스:
bashgit rebase main
feature-login의 커밋들이main최신 커밋 뒤로 다시 쌓임.- 충돌이 나면 충돌 파일 수정 →
git add→git rebase --continue.
main으로 돌아와서 병합 (보통 fast‑forward merge):
bashgit checkout main
git merge feature-login
rebase로 인해feature-login이main뒤에 정렬되어 있어, 별도의 병합 커밋 없이 바로 합쳐지는 경우가 많음.
4‑3. rebase를 쓰는 대표 상황
- PR/MR 올리기 전 히스토리 정리
git rebase main으로main과 최신 동기화 + 충돌 미리 해결.- 남이 보기 좋은 선형 히스토리를 만들 때.
- 커밋 정리용:
rebase --interactive(interactive rebase)- 여러 커밋을 하나로 묶고, 순서를 바꾸거나, 텍스트를 수정할 수 있음.
- PR에서
Squash and merge같은 옵션은 이걸 자동으로 해주는 느낌.
rebase주의 점- 이미 공용 브랜치에 푸시된 커밋을
rebase하면, 다른 사람이pull에서 충돌·혼란을 겪을 수 있음. - 그래서 내 개인 브랜치 안에서만 rebase 사용하는 게 기본 원칙.
- 이미 공용 브랜치에 푸시된 커밋을
4‑4. VS Code / GitHub에서의 rebase 느낌
- VS Code에서 PR 만들 때 옵션:
- Create a merge commit →
merge스타일. - Rebase and merge →
git rebase방식으로 히스토리를 선형 정리. - Squash and merge → 여러 커밋을 하나의 커밋으로 압축해서 올림.
- Create a merge commit →
5. 깃에 있는 다른 중요 기능들
5‑1. 이전 상태로 돌아가기
git checkout 커밋해시- 특정 커밋 시점으로 코드를 잠시 보고 싶을 때.
git restore 파일명- 한 파일만 마지막 커밋 상태로 되돌리기.
git reset- 커밋을 되돌리거나, 커밋을 아예 지우고 다시 커밋하는 등 히스토리를 수정하는 용도.
git reset --hard HEAD~1처럼 쓰면 최근 커밋을 삭제함. 주의 필요.
5‑2. 세 가지 영역 이해
깃은 아래 세 영역을 구분해서 관리:
- 작업 디렉토리 (Working Directory)
- 지금 폴더에서 직접 수정 중인 파일들.
- Staging Area (index)
git add로 선택한 변경들이 모이는 장소.
- 저장소 (Repository)
git commit으로 기록된 이력 전체.
→ git status → git add → git commit의 흐름은
“작업 디렉토리” → “Staging” → “저장소”로 이동하는 과정이라고 보면 이해가 쉬움.
5‑3. 태그(tag)로 릴리즈 버전 관리
- 태그 만들기:
bashgit tag v1.0.0
git push origin v1.0.0
- 특정 태그로 이동:
bashgit checkout v1.0.0
→ 서비스 릴리즈 버전(v1.0.0, v2.0.0처럼)을 명확히 기록할 때 씀.
5‑4. .gitignore로 파일 무시하기
- 프로젝트 폴더에
.gitignore파일 생성:
gitignorenode_modules/
*.log
.env
- 이런 패턴이 적힌 파일은
git add에 아예 포함되지 않음. → 빌드 폴더, 로그, 로컬 환경 변수 파일을 깃에 올리지 않게 할 때 필수.
5‑5. 변경 이력·차이 보기
git log- 커밋 목록, 작성자, 날짜, 메시지 조회.
git log --oneline- 한 줄 요약으로 보기 좋게.
git diff- 수정 전·후 코드 차이를 비교.
git blame 파일명- 파일의 각 줄마다 누가, 언제 수정했는지 보여 줌.
- 버그 찾을 때 유용.
5‑6. 원격 저장소와 동기화
git clone- 원격 저장소를 로컬에 처음 복사.
git pull- 원격 변경을 가져와서 현재 브랜치에 병합 (
fetch+merge).
- 원격 변경을 가져와서 현재 브랜치에 병합 (
git fetch- 원격 변경만 가져오고, 자동 병합은 안 함.
git merge또는git rebase로 직접 합침.
git push- 로컬 커밋을 원격에 업로드.
5‑7. 임시 저장소 stash
- 현재 작업 중인 변경을 잠시 저장:
bashgit stash
- 저장해 둔 내용을 다시 복구:
bashgit stash pop
→ 급한 버그 수정 들어가서 브랜치를 바꿔야 할 때, 현재 작업을 잠깐 “상자에 넣어두고” 다른 브랜치로 이동할 때 씀.
6. 이렇게 정리해서 보면
- 기본 흐름:
git init/clone→git add→git commit→git push - 브랜치 관리:
git branch/git checkout -b→git merge→git branch -d/--delete - 고급 히스토리 정리:
git rebase,interactive rebase,squash - 그 밖에 쓰는 것들:
git reset,git restore,git stash,git tag,.gitignore,git blame
7. 깃 명령어 및 설명 한 번에 정리 표
| 카테고리 | 명령어 예시 | 설명 |
|---|---|---|
| 초기 설정 | git config --global user.name "이름" | 커밋에 쓰일 이름 설정. |
git config --global user.email "이메일" | 커밋에 쓰일 이메일 설정. | |
| 저장소 초기화 | git init | 현재 폴더를 Git 저장소로 만듦. |
git clone URL | 원격 저장소를 로컬에 복사(클론). | |
| 상태 확인 | git status | 현재 수정·추가된 파일 상태 확인. |
git loggit log --oneline | 커밋 히스토리 보기 (한 줄 요약 형식). | |
| 작업 단계 | git add 파일명git add . | 변경을 Staging Area에 올림. |
git commit -m "메시지" | Staging에 있는 변경을 커밋으로 저장. | |
git push origin main | 로컬 커밋을 원격 main 브랜치에 업로드. | |
git pull origin main | 원격 main 브랜치를 로컬에 동기화. | |
git fetch | 원격 변경만 가져오고, 자동 병합은 안 함. | |
| 브랜치 | git branch | 로컬 브랜치 목록 보기. |
git branch feature-xxx | feature-xxx 브랜치 생성 (이동 안 함). | |
git checkout -b feature-xxx | feature-xxx 브랜치 생성 + 바로 이동. | |
git switch branch명 | 다른 브랜치로 이동. | |
git merge branch명 | 현재 브랜치에 branch명 브랜치를 병합. | |
git branch -d branch명 | 이미 병합된 브랜치를 안전하게 삭제. | |
git branch -D branch명 | 강제로 브랜치 삭제. | |
git push origin --delete branch명 | 원격 브랜치 삭제. | |
rebase | git rebase main | 현재 브랜치를 main 끝에 다시 쌓아 정렬. |
git rebase --interactive | 여러 커밋을 재정렬·통합하는 대화형 rebase. | |
git merge branch명 | rebase 후 fast‑forward 병합. | |
| 히스토리 수정 | git reset --hard HEAD~1 | 최근 커밋을 아예 지우고 되돌림(주의 필요). |
git commit --amend | 이전 커밋 메시지를 수정. | |
| 이전 상태로 | git checkout 커밋해시 | 특정 커밋 시점 코드로 이동 (읽기용). |
git restore 파일명 | 특정 파일을 마지막 커밋 상태로 되돌림. | |
stash | git stash | 현재 작업 중인 변경을 임시 보관. |
git stash pop | 임시로 저장해 둔 변경을 다시 복구. | |
| 태그 | git tag v1.0.0 | v1.0.0 태그 생성. |
git push origin v1.0.0 | 태그를 원격으로 푸시. | |
git checkout v1.0.0 | 태그가 붙은 커밋으로 이동. | |
| .gitignore | .gitignore 파일 작성 | 특정 파일/폴더를 Git에서 무시하도록 설정. |
git rm -r --cached . | 이미 커밋된 파일을 인덱스에서만 제거. | |
| 충돌/에러 | git status | 충돌 난 파일 및 상태 확인. |
git add 충돌난파일 | 충돌 해결 후 Staging에 다시 올림. | |
git pull origin main | git push 실패 시 원격과 우선 동기화. |