Git 초보 가이드: 버전 관리 시작하기 위한 모든 것

핵심 요약: Git을 처음 접하는 분을 위해, 터미널에서 명령어를 입력하고 결과를 확인하는 과정을 단계별로 따라 할 수 있게 정리했습니다. "보고서_최종_진짜최종.docx" 지옥에서 벗어나는 30분짜리 실습 튜토리얼입니다.

이 글을 따라하기 전에

Git을 처음 배울 때 가장 답답한 건, 명령어 목록만 나열된 가이드가 대부분이라는 점입니다. "git add"가 뭔지는 알겠는데, 실제로 치면 화면에 뭐가 나오는지를 모르니 불안해서 따라 하기 어렵습니다.

그래서 이 글은 다릅니다. 터미널에서 명령어를 입력했을 때 실제 출력 결과를 그대로 보여드립니다. 컴퓨터 앞에서 터미널을 열고 똑같이 따라 해 보세요. 30분이면 Git의 기본을 확실히 잡을 수 있습니다.

준비물: 컴퓨터 하나, 그리고 약간의 인내심.

Step 1: Git 설치하기

Windows

git-scm.com에서 다운로드 후 설치합니다. 설치 옵션은 전부 기본값 그대로 "Next"를 누르면 됩니다. 설치 완료 후 바탕화면 우클릭 > "Git Bash Here"가 나오면 성공입니다.

macOS

터미널을 열고 아래 명령어를 입력하세요. Xcode 도구 설치를 묻는 팝업이 뜨면 "설치"를 누릅니다.

git --version

또는 Homebrew를 쓴다면:

brew install git

설치 확인 + 초기 설정 (모든 OS 공통)

터미널에서 아래 명령어를 차례로 실행하세요. 따옴표 안의 이름과 이메일을 본인 것으로 바꿔야 합니다.

$ git --version
git version 2.44.0

$ git config --global user.name "홍길동"
$ git config --global user.email "[email protected]"

$ git config --global user.name
홍길동

이 설정은 나중에 "누가 이 코드를 수정했는지" 기록하는 데 사용됩니다. GitHub에 가입할 이메일과 동일하게 설정하는 것을 추천합니다.

Step 2: 첫 번째 저장소 만들기

실습용 폴더를 만들고 Git 저장소로 초기화합니다. 바로 따라해보세요.

$ mkdir my-first-repo
$ cd my-first-repo
$ git init
Initialized empty Git repository in /home/user/my-first-repo/.git/

git init을 실행하면 .git이라는 숨겨진 폴더가 생깁니다. 이 폴더에 모든 변경 이력이 저장됩니다. 절대 이 폴더를 직접 수정하거나 삭제하지 마세요.

$ ls -la
total 12
drwxr-xr-x 3 user user 4096 Apr  2 10:00 .
drwxr-xr-x 5 user user 4096 Apr  2 10:00 ..
drwxr-xr-x 7 user user 4096 Apr  2 10:00 .git

Step 3: 첫 커밋 -- 세이브 포인트 만들기

Git에서 "커밋(commit)"이란 게임의 세이브 포인트와 같습니다. 현재 파일 상태를 저장해두면, 나중에 언제든 이 시점으로 되돌아올 수 있습니다.

파일을 하나 만들고 첫 커밋을 해봅시다.

$ echo "# 나의 첫 프로젝트" > README.md
$ cat README.md
# 나의 첫 프로젝트

이제 git status로 현재 상태를 확인합니다. 이 명령어는 Git에서 가장 많이 쓰는 명령어입니다. 헷갈릴 때마다 치세요.

$ git status
On branch main

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        README.md

nothing added to commit but untracked files present (use "git add" to track)

Git이 "README.md라는 새 파일이 있는데, 아직 추적하지 않고 있어"라고 알려줍니다. 이 파일을 Git에게 "이것도 관리해줘"라고 알려주는 것이 git add입니다.

$ git add README.md
$ git status
On branch main

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   README.md

상태가 "Untracked"에서 "Changes to be committed"로 바뀌었습니다. 이제 커밋할 준비가 된 것입니다. -m 뒤에 무엇을 했는지 설명하는 메시지를 적습니다.

$ git commit -m "프로젝트 초기 설정: README 추가"
[main (root-commit) a1b2c3d] 프로젝트 초기 설정: README 추가
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

축하합니다. 첫 커밋을 만들었습니다. git log로 이력을 확인해보세요.

$ git log
commit a1b2c3d (HEAD -> main)
Author: 홍길동 <[email protected]>
Date:   Wed Apr 2 10:05:00 2026 +0900

    프로젝트 초기 설정: README 추가

Step 4: 수정하고, 또 커밋하기

Git의 핵심 워크플로우를 몸에 익혀봅시다. 파일 수정 → add → commit. 이 세 단계를 반복합니다.

$ echo "이 프로젝트는 Git 학습용입니다." >> README.md
$ echo "print('Hello, Git!')" > main.py
$ git status
On branch main
Changes not staged for commit:
        modified:   README.md

Untracked files:
        main.py

두 가지 변경이 있습니다: README.md는 수정, main.py는 신규 파일. git add .으로 모든 변경을 한번에 스테이징할 수 있습니다. (마침표를 빠뜨리지 마세요!)

$ git add .
$ git commit -m "README 설명 추가 및 main.py 생성"
[main b2c3d4e] README 설명 추가 및 main.py 생성
 2 files changed, 2 insertions(+)
 create mode 100644 main.py
$ git log --oneline
b2c3d4e README 설명 추가 및 main.py 생성
a1b2c3d 프로젝트 초기 설정: README 추가

--oneline 옵션을 붙이면 한 줄로 깔끔하게 볼 수 있습니다. 실무에서는 이 형태를 더 자주 씁니다.

Step 5: 실수를 되돌리기 -- Git의 진짜 가치

여기가 Git을 배워야 하는 가장 핵심적인 이유입니다. 실수를 안전하게 되돌릴 수 있습니다.

시나리오: 파일을 잘못 수정했을 때

$ echo "이 줄은 실수로 추가한 내용" >> README.md
$ cat README.md
# 나의 첫 프로젝트
이 프로젝트는 Git 학습용입니다.
이 줄은 실수로 추가한 내용

아직 add/commit 하지 않았다면, 마지막 커밋 상태로 되돌릴 수 있습니다.

$ git checkout -- README.md
$ cat README.md
# 나의 첫 프로젝트
이 프로젝트는 Git 학습용입니다.

실수로 추가한 줄이 사라졌습니다. 이것이 Git을 쓰는 이유입니다. "보고서_수정전백업.docx"를 만들 필요가 없습니다.

시나리오: 커밋 후에 되돌리고 싶을 때

이미 커밋까지 했다면 git revert를 사용합니다. 이 명령어는 해당 커밋의 변경을 "반대로 적용"하는 새 커밋을 만듭니다.

$ git revert HEAD
# 에디터가 열리면 메시지를 확인하고 저장합니다 (:wq)

주의: git reset이라는 명령어도 있지만, 초보 단계에서는 git revert만 사용하세요. reset은 이력을 지우기 때문에 위험합니다.

Step 6: 브랜치 -- 안전한 실험 공간

브랜치는 "평행 세계"라고 생각하면 됩니다. main 브랜치(현실 세계)는 그대로 두고, 새 브랜치(평행 세계)에서 실험한 후, 결과가 마음에 들면 합치는 것입니다.

$ git branch feature-login
$ git switch feature-login
Switched to branch 'feature-login'

$ git branch
* feature-login
  main

별표(*)가 현재 위치한 브랜치를 나타냅니다. 이제 이 브랜치에서 자유롭게 수정합니다.

$ echo "def login(user, pw): pass" > login.py
$ git add login.py
$ git commit -m "로그인 기능 초안 추가"
[feature-login c3d4e5f] 로그인 기능 초안 추가
 1 file changed, 1 insertion(+)
 create mode 100644 login.py

이 변경은 feature-login 브랜치에만 존재합니다. main으로 돌아가보면:

$ git switch main
Switched to branch 'main'

$ ls
README.md  main.py
# login.py가 없습니다! main에는 영향 없습니다.

로그인 기능이 완성되면, main에 합칩니다.

$ git merge feature-login
Updating b2c3d4e..c3d4e5f
Fast-forward
 login.py | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 login.py

$ ls
README.md  login.py  main.py
# 이제 main에도 login.py가 있습니다!

Step 7: GitHub에 올리기

GitHub은 Git 저장소를 온라인에 보관하는 서비스입니다. 데이터 백업의 관점에서도 중요하고, 다른 사람과 협업할 때 필수입니다.

GitHub 저장소 만들기

  1. github.com에서 무료 계정 생성
  2. 우측 상단 "+" > "New repository" 클릭
  3. Repository name에 "my-first-repo" 입력
  4. "Create repository" 클릭

로컬 저장소와 연결하고 올리기

$ git remote add origin https://github.com/본인계정/my-first-repo.git
$ git push -u origin main
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (9/9), 742 bytes | 742.00 KiB/s, done.
Total 9 (delta 1), reused 0 (delta 0)
To https://github.com/본인계정/my-first-repo.git
 * [new branch]      main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.

GitHub 웹사이트에서 저장소를 새로고침하면 파일들이 올라가 있는 것을 확인할 수 있습니다.

이후에는 변경사항이 생길 때마다 이렇게 하면 됩니다:

$ git add .
$ git commit -m "변경 내용 설명"
$ git push

현업에서 꼭 알아야 할 실전 팁

공식 문서에는 잘 나오지 않지만, 실무에서 자주 부딪히며 익히게 되는 것들입니다.

Tip 1: 커밋 메시지는 "미래의 나"를 위해 쓰세요

나쁜 예: "수정", "업데이트", "fix"

좋은 예: "로그인 실패 시 에러 메시지가 표시되지 않는 버그 수정"

3개월 뒤에 이 커밋을 봤을 때, "아, 그때 그거!"라고 바로 알 수 있어야 합니다.

Tip 2: .gitignore는 프로젝트 시작할 때 바로 만드세요

API 키, 비밀번호, 환경 설정 파일이 GitHub에 올라가면 큰 보안 사고가 됩니다. 2단계 인증을 설정해도, 코드에 비밀번호가 노출되면 소용없습니다.

# .gitignore 파일 예시
.env              # 환경변수 (API 키 등)
node_modules/     # npm 패키지 (용량 큼)
__pycache__/      # Python 캐시
*.pyc             # Python 컴파일 파일
.DS_Store         # macOS 시스템 파일

Tip 3: 절대 main 브랜치에서 직접 작업하지 마세요

혼자 작업해도 이 습관을 들여두세요. 나중에 팀에서 일할 때 큰 차이를 만듭니다. "기능 하나 = 브랜치 하나" 원칙을 지키면, 문제가 생겨도 main은 항상 안전합니다.

Tip 4: git status를 습관적으로 치세요

commit 전, push 전, 퇴근 전에 항상 git status를 치는 습관을 들이세요. 의도하지 않은 파일이 포함되었는지 확인하는 습관이 많은 실수를 막아줍니다.

명령어가 어렵다면: GUI 도구 추천

터미널이 부담스럽다면 GUI 도구로 시작해도 전혀 문제없습니다.

  • GitHub Desktop (무료): 가장 직관적. 초보자에게 강력 추천합니다. 클릭 몇 번으로 commit, push, pull이 가능합니다.
  • VS Code 내장 Git (무료): AI 코딩 도구와 함께 쓴다면, VS Code 하나로 코딩+Git 관리를 모두 할 수 있습니다. 소스 컨트롤 패널(Ctrl+Shift+G)에서 변경 사항을 시각적으로 확인 가능합니다.
  • Sourcetree (무료): 브랜치 그래프를 시각적으로 보여줘서, 복잡한 브랜치 구조를 이해하기 좋습니다.

다만 GUI로 시작하더라도 기본 명령어 5~6개는 꼭 익혀두세요. 서버에 SSH로 접속해서 작업할 때, CI/CD 파이프라인을 디버깅할 때 등 GUI가 없는 환경은 생각보다 자주 만나게 됩니다.

다음 단계: 여기서부터 더 배울 것들

이 튜토리얼로 Git의 기초를 잡았다면, 다음 주제들을 순서대로 공부하시길 추천합니다:

  1. 머지 충돌(Merge Conflict) 해결 -- 팀 협업 시 반드시 겪게 됩니다
  2. git stash -- 작업 중인 내용을 임시 저장하는 기능
  3. Pull Request 리뷰 -- 팀에서 코드 품질을 유지하는 핵심 도구
  4. GitHub Actions -- 자동 테스트/배포 설정

코딩 부트캠프 가이드에서 체계적인 학습 로드맵을 확인할 수도 있습니다. Git은 개발자의 가장 기본적이면서도 가장 중요한 도구입니다. 오늘 30분 투자가 앞으로 수백 시간을 절약해줄 것입니다.

자주 묻는 질문 (FAQ)

git add와 git commit의 차이가 뭔가요? 왜 두 단계로 나눠져 있나요?

git add는 "이 파일을 다음 세이브에 포함시키겠다"는 선택이고, git commit은 실제 "세이브"를 실행하는 것입니다. 두 단계로 나눠진 이유는 선택적 커밋이 가능하기 때문입니다. 예를 들어 파일 5개를 수정했지만, 로그인 관련 2개만 먼저 커밋하고 싶을 때 git add login.py auth.py만 하면 됩니다. 나머지 3개는 다음 커밋에 포함시킬 수 있습니다.

git push 할 때 비밀번호를 매번 물어보는데, 어떻게 해결하나요?

GitHub은 2021년부터 비밀번호 대신 Personal Access Token(PAT) 또는 SSH 키를 요구합니다. 가장 쉬운 방법은 GitHub 설정에서 PAT를 발급받아 비밀번호 대신 입력하고, git config --global credential.helper store 명령으로 저장하는 것입니다. SSH 키 방식이 더 안전하지만 초보 단계에서는 PAT로 시작해도 충분합니다.

실수로 중요한 파일(API 키 등)을 커밋했는데, 어떻게 삭제하나요?

git rm --cached 파일명으로 Git 추적을 해제하고 .gitignore에 추가한 후 새로 커밋하세요. 하지만 이미 push했다면 Git 이력에 남아있어서 단순 삭제로는 부족합니다. git filter-branch나 BFG Repo-Cleaner 같은 도구로 이력을 정리해야 합니다. 가장 좋은 방법은 해당 API 키를 즉시 폐기하고 새로 발급받는 것입니다. 이런 상황을 예방하려면 프로젝트 시작 시 .gitignore를 먼저 만드세요.