1. Git

src/content/documents/dev-tools/git-basics.json

깃이란 ?

Git은 파일이 바뀐 내역을 시점별로 저장해두고 언제든 되돌아갈 수 있게 해주는 프로그램이다.

:::win
하이요:::

Windows 전용 내용을 입력하세요.

macOS 전용 내용을 입력하세요.

Linux 전용 내용을 입력하세요.ㄴ

왜 필요한가https://claude.ai/new

Git을 모르면 이런 폴더가 만들어진다.ㅇ

ㄴㄹ📁 졸업논문
├── 논문.pdf
├── 논문_최종.pdf
:::max
├── 논문_최종최종최종.pdf
:::
├── 논문_마지막최종.pdf
├── 논문_진짜최종_교수님피드백반영.pdf
└── 논문_이게진짜마지막.pdf

여기엔 세 가지 문제가 있다.

  • 뭐가 최신인지 모른다. 이름만 봐서는 순서를 알 수 없다

  • 뭐가 바뀌었는지 모른다. 파일 두 개를 나란히 놓고 눈으로 비교해야 한다

  • 되돌릴 수 없다. 3번째 버전의 3장만 살리고 싶어도 방법이 없다

Git은 이 세 가지를 해결한다. 파일은 하나만 두고, 대신 "이 시점의 상태"를 이름표와 함께 창고에 쌓아둔다.

Git 없이 논문_최종.pdf처럼 파일을 계속 복사해 최신본과 수정 내용을 알 수 없게 되는 방식과, Git으로 논문.pdf 하나에 커밋 기록을 쌓아 원하는 시점으로 되돌릴 수 있는 방식 비교

핵심 개념

Git을 이해하려면 용어 네 개만 알면 된다. 게임을 개발하는 과정에 비유하면 쉽다.

게임 개발 과정에 비유한 Git 핵심 개념 흐름: Working Directory, Staging Area, Commit, Repository
  • Working Directory는 Unity에서 씬, 스크립트, 에셋을 수정하고 있는 현재 게임 프로젝트 폴더다.

  • Staging Area는 스킬 테스트처럼 이번 테스트 버전에 포함할 변경만 골라 올려두는 목록이다.

  • Commit은 문제가 생기면 다시 돌아올 수 있도록 선택한 변경을 테스트 버전으로 기록하는 체크포인트다.

  • Repository는 개발 버전을 보관하는 저장소이며, 원격 저장소에 올리면 팀원도 같은 테스트 버전을 확인할 수 있다.

왜 ‘스테이징’이라는 단계가 있나

초보자가 가장 헷갈려 하는 부분이다. "파일 고쳤으면 그냥 저장하면 되지, 왜 두 단계야?"

파일 10개를 고쳤는데 그중 3개만 저장하고 싶을 때가 있기 때문이다.

게임 개발 과정에 비유한 스테이징 흐름: 작업 화면에서 수정한 10개 중 git add로 완성된 보스 제작 3개만 골라 올리고, git commit으로 개발 체크포인트를 남긴다. 아직 만드는 중인 플레이어 임시 스킬과 미니맵 실험적 기능은 작업 화면에 그대로 남는다

보스 제작은 끝났는데 플레이어 임시 스킬은 아직 시험 중이고, 미니맵 실험적 기능은 될지 안 될지도 모르는 상태다. 이때 전부 한꺼번에 저장하면, 완성된 것과 만들다 만 것이 한 기록에 섞인다.

"이번엔 다 된 보스 제작만 묶자" 하고 그 파일들만 골라내는 것 — 그게 git add다. 다 골랐으면 보스 제작 완료라는 이름으로 기록을 확정하는 것 — 그게 git commit이다.

그래야 남겨둔 실험이 잘못돼도 보스 제작 시점으로 깨끗하게 돌아갈 수 있다. 스테이징은 완성된 것만 골라 남기라고 있는 단계다.

동작 구조

Git 명령어 3개가 파일을 어떤 공간으로 옮기는지가 전부다.

내 컴퓨터에서 작업 폴더의 변경을 git add로 스테이징하고, git commit으로 저장소에 기록한 뒤 git log로 확인하는 흐름

명령

하는 일

한국어로 하면

git status

지금 어떤 파일이 어느 단계에 있는지 보여준다

"지금 상황이 어때?"

git add <파일>

작업 폴더 → 스테이징

"이번 기록엔 이것만 넣을 거야"

git commit -m "메시지"

스테이징 → 저장소

"여기까지 확정, 이름은 이걸로"

git log

지금까지 만든 체크포인트 목록

"그동안 뭘 만들었지?"

예제

준비 — 설치 확인

터미널(Windows는 Git Bash 또는 PowerShell)을 열고 입력한다.

git --version
git version 2.45.2

이렇게 버전이 나오면 설치된 것이다. command not found가 나오면 git-scm.com에서 설치한다.

이름표 설정 (최초 1회만)

커밋에는 "누가 찍었는지"가 기록된다. 처음 한 번만 설정하면 된다.

git config --global user.name "홍길동"ㄹㅎㄴㅇㄹ
ㅇㄹ

ㄴㅇㄹ

git config --global user.email "hong@example.com"ㄹ

설정됐는지 확인한다.

dsfsdf
git config --global user.nameㅇㄴㄹㅇㄴㄹ


https://claude.ai/new

https://claude.ai/new

claude.aihttps://claude.ai/new

https://claude.ai/new

claude.aihttps://claude.ai/new

홍길동

--global은 "이 컴퓨터의 모든 프로젝트에 적용"이라는 뜻이다.

1단계 — 저장소 만들기

연습용 폴더를 만들고 그 안에서 Git을 시작한다.

mkdir git-practice
cd git-practice
git init -b main

https://claude.ai/new

ㅇㅎ


sdf

Initialized empty Git repository in /Users/hong/git-practice/.git/ㅇㄹ

.git이라는 숨김 폴더가 생겼다. 폴더가 창고다. 여기에 모든 기록이 쌓인다. (이 폴더를 지우면 기록이 전부 사라지므로 건드리지 않는다.)

-b main은 첫 브랜치 이름을 main으로 정하는 옵션이다. 브랜치는 다음 문서에서 다룬다.

2단계 — 파일 만들고 상태 확인

echo "# 내 첫 프로젝트" > README.md
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)

빨간색으로 나오는 README.md가 핵심이다. Untracked는 "Git이 아직 이 파일을 모른다"는 뜻이다. 방금 만들었으니 당연하다.

3단계 — 스테이징 (기록할 변경 고르기)

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

아까 빨간색이던 파일이 초록색으로 바뀌었다. Changes to be committed(커밋될 변경사항) 아래로 옮겨간 것이 보인다. 이번 기록에 포함하기로 고른 상태다.

4단계 — 커밋 (체크포인트 만들기)

git commit -m "docs: README 추가"
[main (root-commit) a3f9c21] docs: README 추가
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
  • a3f9c21 — 이 커밋의 고유 ID(해시). 나중에 이 시점으로 돌아갈 때 쓴다

  • 1 file changed, 1 insertion(+) — 파일 1개에서 1줄이 추가됨

5단계 — 결과 확인

git status
On branch main
nothing to commit, working tree clean

working tree clean이 보이면 성공이다. "고칠 것도, 저장할 것도 없이 깨끗하다"는 뜻이다.

git log --oneline
a3f9c21 (HEAD -> main) docs: README 추가

첫 체크포인트가 보관함에 들어갔다.

전체 흐름 한눈에

sequenceDiagram
    participant N as 나
    participant W as 작업 폴더
    participant S as 스테이징
    participant R as 저장소

    N->>W: README.md 작성
    N->>W: git status
    W-->>N: "Untracked: README.md" (빨강)
    N->>S: git add README.md
    N->>W: git status
    S-->>N: "new file: README.md" (초록)
    N->>R: git commit -m "docs: README 추가"
    R-->>N: "[main a3f9c21] 1 file changed"
    N->>W: git status
    W-->>N: "working tree clean" ✅

코드

두 번째 커밋까지 해보는 전체 스크립트다. 그대로 복사해 실행할 수 있다.

# 1. 저장소 시작
mkdir git-practice && cd git-practice
git init -b main

# 2. 첫 커밋
echo "# 내 첫 프로젝트" > README.md
git add README.md
git commit -m "docs: README 추가"

# 3. 파일을 고치고 두 번째 커밋
echo "" >> README.md
echo "Git 연습용 저장소입니다." >> README.md

git diff                       # 뭐가 바뀌었는지 확인
git add README.md
git commit -m "docs: 저장소 설명 추가"

# 4. 기록 확인
git log --oneline

git diff의 출력은 이렇게 나온다.

diff --git a/README.md b/README.md
index 8b13789..3f2a1c4 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,3 @@
 # 내 첫 프로젝트
+
+Git 연습용 저장소입니다.

+로 시작하는 초록색 줄이 추가된 내용이다. 삭제된 줄은 -와 빨간색으로 나온다. 커밋하기 전에 git diff로 확인하는 습관을 들이면 실수가 크게 준다.

마지막 git log --oneline 결과다.

7c4e0a8 (HEAD -> main) docs: 저장소 설명 추가
a3f9c21 docs: README 추가

장점

  • 되돌릴 수 있다. 어제 잘 되던 상태로 명령 한 줄이면 돌아간다

  • 뭐가 바뀌었는지 정확히 보인다. git diff가 줄 단위로 알려준다

  • 파일명을 더럽히지 않는다. _최종_진짜최종이 사라진다

  • 혼자 써도 이득이다. 협업은 부가 기능이고, 1인 프로젝트에서도 값어치가 충분하다

단점

  • 처음 배울 때 개념 부담이 있다. 스테이징이라는 중간 단계가 직관적이지 않다

  • 텍스트 파일에 최적화돼 있다. 이미지·동영상·hwp는 변경 내역을 줄 단위로 보여주지 못한다

  • 한 번 커밋한 것은 히스토리에 남는다. 실수로 넣은 큰 파일이나 비밀번호를 지우기 번거롭다

자주 발생하는 문제

증상

원인

해결

git: command not found

Git이 설치되지 않음

git-scm.com에서 설치 후 터미널 재시작

fatal: not a git repository

Git 저장소가 아닌 폴더에 있음

cd로 올바른 폴더로 이동하거나 git init

Please tell me who you are

user.name/email 미설정

위 "이름표 설정" 참고

nothing to commit

git add를 안 함

git add <파일> 먼저 실행

커밋 메시지 창이 열리고 못 빠져나감

-m 없이 git commit 실행 → vim이 열림

https://claude.ai/new

Esc:wqEnter

한글 파일명이 \355\225\234처럼 깨짐

Git의 한글 이스케이프

git config --global core.quotepath false

vim에서 빠져나오기

가장 많이 당황하는 상황이다. git commit-m 없이 치면 이런 화면이 뜬다.

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
~
~
~
"~/git-practice/.git/COMMIT_EDITMSG" 9L, 285B

당황하지 말고 Esc 누르고 :q! 입력 후 Enter 를 치면 취소된다. 그다음 -m 옵션을 붙여 다시 실행한다.

실제 프로젝트 적용

이 사이트(AI Knowledge Base)도 Git으로 관리된다. 문서를 하나 쓸 때마다 커밋하고, 커밋이 GitHub에 올라가면 사이트가 자동으로 다시 빌드된다.

관련 문서

참고 자료

댓글 0

댓글을 불러오는 중…