완전 초보자를 위한 Git·GitHub 실습 가이드. 장바구니(add·commit)와 타임머신(log·checkout·reset) 비유로 설치부터 GitHub 첫 push, 자주 만나는 에러 3종 복구법까지 명령어 그대로 따라해봅니다.
"커밋이 뭐예요?", "스테이징은 또 뭔데요?" — Git을 처음 접하면 낯선 용어부터 벽에 부딪힙니다. 이 글은 어려운 설명 대신 마트에서 장 보는 장면과 타임머신이라는 두 가지 비유 하나로 끝까지 밀고 갑니다. 설치부터 GitHub에 첫 코드를 올리는 순간, 그리고 초보자가 백이면 백 만나는 에러 3종을 실제 명령어와 함께 그대로 따라 해볼 수 있도록 정리했습니다. 협업 워크플로 이론이나 특정 트러블슈팅 스토리가 아니라, 손으로 직접 쳐보면서 익히는 설치·기초 실습편입니다.
비유 하나만 기억하세요: 장바구니와 타임머신
Git이 하는 일은 딱 두 가지로 요약됩니다.
- 장바구니 — 지금 수정한 파일 중에서 "이번엔 이것들을 저장할래"라고 담는 것 (staging,
git add) - 타임머신 — 예전에 저장해둔 시점으로 언제든 돌아가거나, 지나온 기록을 훑어보는 것 (history,
git log·git checkout·git reset)
이 두 개념만 몸에 익으면 나머지 명령어는 전부 이 위에 살을 붙이는 수준입니다. 지금부터 설치 → 장바구니 → 타임머신 → GitHub 업로드 → 에러 복구 순서로 실습해보겠습니다.
1단계. Git 설치하기 (Windows / Mac)
Windows
- git-scm.com에 접속하면 자동으로 Windows용 설치 파일 다운로드가 시작됩니다.
- 다운로드한
.exe파일을 실행하고, 옵션 화면은 대부분 기본값 그대로 Next를 눌러도 무방합니다. (초보자라면 굳이 옵션을 바꾸지 않는 게 안전합니다.) - 설치가 끝나면 시작 메뉴에서 Git Bash를 실행합니다. 앞으로 모든 명령어는 이 Git Bash 창에서 입력합니다.
Mac
둘 중 하나를 선택하면 됩니다.
- Homebrew가 있다면 — 터미널에
brew install git - Homebrew가 없다면 — 터미널에
xcode-select --install입력 후 안내창에서 설치 (애플의 커맨드라인 도구에 Git이 포함되어 있습니다)
설치 확인 및 최초 설정
설치가 끝났다면 터미널(또는 Git Bash)에 아래 명령어를 입력해 버전이 출력되는지 확인합니다.
git --version
버전이 정상적으로 뜬다면, 커밋에 이름과 이메일이 기록되도록 최초 1회만 아래처럼 설정해둡니다.
git config --global user.name "본인 이름"
git config --global user.email "you@example.com"
2단계. 장바구니로 이해하는 git add · git commit
Git 저장소로 만들고 싶은 폴더가 곧 매장입니다. 폴더 안에서 파일을 만들거나 수정하는 건 매장 진열대에 물건을 올리고 손보는 것이고, 그중 저장하고 싶은 것만 골라 장바구니(스테이징 영역)에 담는 게 git add, 장바구니를 들고 계산대로 가서 결제하고 영수증(커밋)을 받는 게 git commit입니다.
# 1. 매장(저장소) 만들기 — 폴더 안에 .git 이라는 창고가 생깁니다
mkdir my-project
cd my-project
git init
# 2. 진열대에 물건 올리기 — 파일 생성
echo "# 나의 첫 프로젝트" > README.md
# 3. 지금 진열대 상태 확인
git status
# 4. 장바구니에 담기 (스테이징)
git add README.md
# 전체를 한 번에 담고 싶다면
git add .
# 5. 계산하고 영수증 받기 (커밋)
git commit -m "README 최초 작성"
git status는 지금 진열대(작업 디렉터리)에 뭐가 새로 생겼는지, 장바구니(스테이징)엔 뭐가 담겨 있는지 알려주는 명령어라 습관처럼 자주 쳐보는 게 좋습니다. 그리고 커밋 메시지(-m 뒤의 문구)는 영수증에 적히는 "무엇을 샀는지" 설명이니, "수정함" 같은 애매한 말보다 "로그인 버튼 색상 변경"처럼 구체적으로 적어두면 나중에 타임머신을 탈 때 훨씬 편합니다.
3단계. 타임머신으로 이해하는 git log · checkout · reset
커밋을 여러 번 쌓았다면, 이제 과거 시점을 조회하고 되돌아갈 수 있습니다.
영수증 내역 확인하기 — git log
# 지금까지 쌓인 커밋(영수증) 전체 목록
git log
# 한 줄씩 간단히 보기 (실무에서 더 자주 씀)
git log --oneline
git log --oneline을 실행하면 a1b2c3d 로그인 버튼 색상 변경처럼 커밋 해시와 메시지가 나열됩니다. 이 앞자리 해시(a1b2c3d)가 타임머신의 "목적지 좌표"입니다.
과거로 돌아가기 — checkout / reset
목적에 따라 두 가지 방식이 있습니다.
- 파일 하나만 그 시점 버전으로 꺼내오고 싶을 때 —
git checkout <커밋해시> -- 파일명(매장 전체가 아니라 특정 물건 하나만 과거 버전으로 교체하는 느낌입니다. 이후 다시git add·git commit이 필요합니다.) - 전체를 그 시점 상태로 되돌리고 싶을 때 —
git reset --hard <커밋해시>
# 예: 특정 파일만 과거 버전으로
git checkout a1b2c3d -- src/App.jsx
# 예: 프로젝트 전체를 그 시점으로 완전히 되돌리기
git reset --hard a1b2c3d
⚠️ 주의 — git reset --hard는 그 시점 이후의 변경사항을 전부 지워버리는, 타임머신 중에서도 가장 강력한 기능입니다. 되돌린 이후 시점의 커밋들은 화면에서 사라지므로(완전히 사라지는 건 아니지만 눈에 안 보이는 상태), 확신이 없다면 먼저 --hard 대신 변경 내용을 스테이징에만 남기는 git reset --soft <커밋해시>로 한 단계 약하게 시도해보는 걸 추천합니다.
4단계. GitHub에 처음 Push하기
지금까지는 내 컴퓨터 안에서만 벌어진 일입니다. 이 기록을 클라우드(GitHub)에 백업하고 다른 사람과 공유하려면 아래 순서를 따릅니다.
- github.com에서 회원가입을 합니다.
- 우측 상단 + 버튼 → New repository를 눌러 저장소 이름을 정하고 생성합니다. (이미 로컬에 프로젝트가 있다면 README·License 자동 생성 옵션은 체크하지 않는 걸 추천합니다.)
- 생성된 저장소 페이지에 나오는 주소(
https://github.com/아이디/저장소이름.git)를 복사합니다.
# 내 로컬 저장소와 GitHub 저장소를 연결
git remote add origin https://github.com/아이디/저장소이름.git
# 브랜치 이름을 main으로 통일
git branch -M main
# 첫 업로드 (이후 이 저장소를 "origin의 main"으로 기억시켜 둠)
git push -u origin main
이후부터는 코드를 수정하고 커밋할 때마다 git push 한 줄이면 됩니다. HTTPS 방식으로 push할 때 비밀번호를 물어보면, GitHub는 계정 비밀번호 대신 Personal Access Token(PAT)을 요구합니다. GitHub 설정의 Developer settings에서 토큰을 발급받아 비밀번호 칸에 그대로 붙여넣으면 됩니다.
초보자가 자주 만나는 에러 3가지와 복구법
① fatal: not a git repository (or any of the parent directories): .git
원인 — git init을 하지 않은 폴더에서, 또는 프로젝트 폴더가 아닌 엉뚱한 위치에서 Git 명령어를 실행했을 때 나타납니다.
해결
# 지금 내가 어느 폴더에 있는지 확인
pwd
# 올바른 프로젝트 폴더로 이동
cd my-project
# 그래도 안 되면, 이 폴더가 아직 매장으로 등록 안 된 것 — 매장 등록
git init
② Merge conflict (병합 충돌)
원인 — git pull이나 git merge 도중, 같은 파일의 같은 줄을 로컬과 원격에서 서로 다르게 고쳐놓았을 때 Git이 "어느 걸 남길지 못 정하겠다"며 멈추는 상황입니다. 충돌이 난 파일을 열어보면 아래처럼 표시됩니다.
<<<<<<< HEAD
내가 로컬에서 고친 내용
=======
원격(다른 사람 또는 GitHub)에 있던 내용
>>>>>>> origin/main
해결 — 파일을 직접 열어 남길 내용만 남기고 <<<<<<< · ======= · >>>>>>> 표시(마커)를 전부 지운 뒤, 다시 장바구니에 담고 계산합니다.
git add 충돌난파일명
git commit -m "충돌 해결"
③ Updates were rejected / refusing to merge unrelated histories
원인 — GitHub에서 저장소를 만들 때 README를 자동 생성한 경우처럼, 원격 저장소에 이미 로컬이 모르는 커밋이 있는 상태에서 push를 시도하면 발생합니다.
해결 — 원격 내용을 먼저 받아와 합친 뒤 push합니다. 히스토리 자체가 서로 다른 최초 상황이라면 --allow-unrelated-histories 옵션이 필요할 수 있습니다.
git pull origin main --allow-unrelated-histories
# 충돌이 뜨면 위 ②번 방법으로 해결 후
git push
오늘 배운 명령어 한눈에 보기
실습 중 헷갈리면 아래 표를 그대로 참고하며 따라 치면 됩니다.
| 명령어 | 비유 | 하는 일 |
|---|---|---|
git init | 매장 개업 | 현재 폴더를 Git 저장소로 등록 |
git status | 진열대 점검 | 무엇이 바뀌었고 뭐가 담겼는지 확인 |
git add 파일명 | 장바구니에 담기 | 변경 파일을 스테이징 영역으로 이동 |
git commit -m "메시지" | 결제하고 영수증 받기 | 스테이징된 내용을 하나의 기록(스냅샷)으로 저장 |
git log --oneline | 영수증 내역 보기 | 지금까지 쌓인 커밋 목록을 요약해서 조회 |
git checkout 해시 -- 파일 | 물건 하나만 과거로 | 특정 파일만 그 시점 버전으로 꺼내오기 |
git reset --hard 해시 | 매장 전체를 그날로 | 저장소 전체를 그 시점 상태로 완전히 되돌리기 |
git push | 택배로 클라우드 창고 발송 | 로컬 커밋 기록을 GitHub 원격 저장소에 업로드 |
처음에는 표를 옆에 켜두고 하나씩 따라 치는 것만으로 충분합니다. 손으로 직접 git add, git commit을 몇 번만 반복해보면 "장바구니에 담고 결제한다"는 감각이 자연스럽게 몸에 붙습니다.
자주 묻는 질문
Q. 방금 쓴 커밋 메시지에 오타가 있어요. 되돌릴 수 있나요?
바로 직전 커밋이라면 git commit --amend -m "새 메시지"로 고칠 수 있습니다. 단, 이미 push까지 끝낸 커밋을 amend하면 원격과 기록이 어긋나므로, 협업 중인 저장소라면 신중하게 사용하세요.
Q. 장바구니에 잘못 담은 파일을 빼고 싶어요.
git restore --staged 파일명을 입력하면 스테이징만 취소되고, 파일 수정 내용 자체는 그대로 남습니다. 파일 내용까지 원래대로 되돌리고 싶다면 git restore 파일명을 추가로 실행합니다.
Q. git reset --hard를 실수로 눌렀어요. 복구할 방법이 없나요?
완전한 안전망은 아니지만, git reflog를 입력하면 최근 HEAD가 이동한 기록이 남아 있어 사라진 것처럼 보이던 커밋 해시를 다시 찾아 git reset --hard 그해시로 복구할 수 있는 경우가 많습니다. 다만 시간이 지나거나 Git이 내부 정리를 하면 사라질 수 있으니, 애초에 --hard는 확신이 설 때만 사용하는 게 안전합니다.
Q. 이 글과 다른 Git 입문 콘텐츠는 뭐가 다른가요?
이 글은 설치 화면부터 첫 push, 그리고 초보자가 실제로 마주치는 에러 메시지 3가지를 순서대로 손으로 따라 하는 실습 중심 가이드입니다. 실무 협업 흐름(clone→branch→PR→merge)을 정석대로 알고 싶다면 별도의 개발자용 워크플로 글을, 특정 사고 상황을 스토리로 따라가며 복구하는 경험이 필요하다면 트러블슈팅 스토리형 글을 참고하시면 서로 겹치지 않게 도움이 됩니다.
수강 정보
이 글에서 다룬 내용은 누구나패스의 무료 강의 「깃 깃허브 사용법 완벽 가이드」에서 화면을 직접 보며 15분 만에 따라 할 수 있습니다. 회원가입 후 바로 시청 가능하며, 카테고리는 개발·프로그래밍입니다.
설치부터 실전 에러 복구까지, 지금 바로 확인해보세요.
댓글
불러오는 중...
