버전 관리 시스템의 기본을 배워봅시다
보고서_최종.docx 보고서_최종_수정.docx 보고서_진짜최종.docx 보고서_진짜진짜최종_v2.docx
파일을 수정할 때마다 이름을 바꿔서 저장한 경험, 다들 있으시죠? 코드도 마찬가지입니다. 기능을 추가하다가 갑자기 에러가 나면 "아까 되던 코드로 돌아가고 싶다!"는 생각이 들 때가 있습니다.
Git은 이 문제를 해결해줍니다.
Git은 버전 관리 시스템(VCS)입니다. 쉽게 말해 코드의 타임머신이자 세이브 포인트입니다.
게임에서 세이브를 하면 언제든 그 시점으로 돌아갈 수 있죠? Git도 마찬가지입니다. 코드가 잘 되는 시점에 "저장(커밋)"을 해두면, 나중에 코드가 망가져도 그 시점으로 돌아갈 수 있습니다.
| 구분 | Git | GitHub |
|---|---|---|
| 정체 | 프로그램 (내 컴퓨터에 설치) | 웹사이트 (인터넷 저장소) |
| 비유 | 내 컴퓨터의 세이브 파일 | 클라우드에 올린 세이브 파일 |
| 역할 | 버전 관리를 수행 | Git 저장소를 온라인에 보관 |
| 인터넷 | 필요 없음 | 필요함 |
정리하면 Git은 내 컴퓨터에서 돌아가는 도구이고, GitHub는 그 결과물을 인터넷에 올려두는 서비스입니다.
Git에는 파일이 거치는 3개의 공간이 있습니다. 이것만 이해하면 절반은 끝입니다.
비유로 설명하면:
터미널(명령 프롬프트)을 열고 아래 명령어를 입력하세요.
git --versiongit version 2.xx.x 같은 결과가 나오면 이미 설치되어 있는 것입니다.
| 운영체제 | 설치 방법 |
|---|---|
| Windows | https://git-scm.com 에서 다운로드 후 설치 (기본 설정 그대로 Next) |
| Mac | 터미널에서 xcode-select --install 입력 |
Git을 처음 사용할 때 "나는 누구인지" 알려줘야 합니다. 아래 명령어에서 따옴표 안의 내용을 본인 정보로 바꿔 입력하세요.
git config --global user.name "홍길동"git config --global user.email "hong@example.com"설정이 잘 됐는지 확인하려면 git config --list 를 입력합니다.
git init→ "여기서 Git 시작할게!"git status→ "지금 상태가 어때?"git add→ "이 파일 보낼 준비!"git commit→ "저장 확정!"git log→ "지금까지 기록 보여줘"mkdir my_project cd my_project git init
git init을 실행하면 해당 폴더가 Git 저장소가 됩니다. 숨겨진 .git 폴더가 생성되는데, 이 폴더가 모든 버전 기록을 보관합니다.
⚠️ 주의사항: .git 폴더를 절대 직접 수정하거나 삭제하지 마세요!
git status
이 명령어는 현재 어떤 파일이 수정되었고, 어떤 파일이 커밋 준비가 되었는지 알려줍니다.
출력 예시:
On branch main Untracked files: ← "Git이 아직 모르는 새 파일이 있어요" hello.py Changes not staged: ← "수정했지만 아직 add 안 한 파일" modified: main.py Changes to be committed: ← "add 완료! 커밋하면 저장됩니다" new file: utils.py
💡 팁: 뭘 해야 할지 모르겠으면 git status부터 치세요!
# 특정 파일 하나만 추가 git add hello.py # 여러 파일 한번에 추가 git add hello.py main.py # 현재 폴더의 모든 변경 파일 추가 git add .
git add는 '이 파일을 다음 커밋에 포함시키겠다'는 의미입니다.
git commit -m "첫 번째 커밋: hello.py 추가"
-m 뒤에 오는 문자열은 커밋 메시지입니다. '이번에 뭘 했는지'를 간단히 적는 것입니다.
좋은 예:
나쁜 예:
# 전체 로그 보기 git log # 한 줄씩 간단히 보기 (추천!) git log --oneline
앞의 영문+숫자 조합은 커밋 ID입니다. 나중에 특정 시점으로 돌아갈 때 이 ID를 사용합니다.
출력 예시:
a1b2c3d (HEAD -> main) 비밀번호 검증 기능 추가 f4e5d6c 로그인 기능 구현 7a8b9c0 첫 번째 커밋: 프로젝트 생성
파이썬 파일을 만들고, 수정하면서 Git으로 버전을 관리해봅니다.
mkdir python_practice cd python_practice git init
결과:
Initialized empty Git repository in .../python_practice/.git/
hello.py 파일을 만들고 아래 내용을 작성하세요.
# hello.py
print("안녕하세요! Git 실습입니다.")git status # hello.py가 Untracked로 표시됨 git add hello.py # 스테이징 git status # hello.py가 "Changes to be committed"로 변경됨 git commit -m "첫 번째 커밋: hello.py 생성"
hello.py 파일을 만들고 아래 내용을 작성하세요.
# hello.py
def greet(name):
print(f"안녕하세요, {name}님! Git 실습입니다.")
greet("철수")git status # hello.py가 "modified"로 표시됨 git add hello.py git commit -m "greet 함수 추가"
calculator.py 파일을 만들고 아래 내용을 작성하세요.
# calculator.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
print(add(3, 5)) # 8
print(subtract(10, 4)) # 6git add calculator.py git commit -m "계산기 함수 추가 (add, subtract)"
git log --oneline
결과:
c3d4e5f (HEAD -> main) 계산기 함수 추가 (add, subtract) a1b2c3d greet 함수 추가 7a8b9c0 첫 번째 커밋: hello.py 생성
🎉 축하합니다! 3개의 버전(세이브 포인트)이 만들어졌습니다!
# 첫 번째 커밋 시점의 hello.py 내용 보기 git show 7a8b9c0:hello.py
아까 작성한 첫 번째 버전의 코드가 보입니다. 이처럼 Git은 모든 변경 기록을 보관하고 있어서 언제든 과거 시점의 코드를 확인할 수 있습니다.
https://github.com 에서 계정을 만듭니다 (무료).
git remote add origin https://github.com/내아이디/python_practice.git git branch -M main git push -u origin main
| 명령어 | 의미 |
|---|---|
git remote add origin 주소 | "이 GitHub 주소를 origin이라는 이름으로 연결해줘" |
git branch -M main | "현재 브랜치 이름을 main으로 할게" |
git push -u origin main | "내 커밋들을 GitHub에 올려줘!" |
이 3단계가 Git 사용의 기본 루틴입니다.
# 1. 코드 수정 # 2. add + commit git add . git commit -m "변경 내용 설명" # 3. GitHub에 반영 git push
git init새 저장소 만들기git status현재 상태 확인git add 파일명커밋할 파일 지정git add .모든 변경 파일 지정git commit -m ""변경사항 확정 저장git log커밋 기록 보기git log --oneline커밋 기록 한줄로 보기git remote addGitHub 저장소 연결git pushGitHub에 업로드[일상 루틴]
코드 수정 → git add . → git commit -m "" → git pushnothing to commit, working tree cleanadd를 하지 않았거나, 파일을 수정하지 않은 상태입니다. git status로 현재 상태를 먼저 확인하세요.
-m 옵션 없이 git commit만 입력하면 텍스트 편집기(vim)가 열립니다.당황하지 말고 아래를 입력하세요. :q! ← 저장 안 하고 나가기 그런 다음 -m 옵션을 붙여서 다시 커밋하세요. git commit -m "메시지 입력"
git reset HEAD 파일명 # 스테이징 취소 (파일 내용은 안 바뀜)
.git 폴더가 삭제되면 모든 커밋 기록이 사라집니다. 복구 불가능하므로 이 폴더는 절대 삭제하지 마세요.