
Git이란
Git은 한마디로 버전 관리 도구이다.
- 작업하다가 “여기까지는 괜찮다!” 싶은 순간을 커밋(commit) 으로 저장해두고
- 실수하거나 망가졌을 때 예전 상태로 되돌아갈 수 있다.
- 여러 명이 동시에 작업해도, 각자 만든 변경을 안전하게 합치고(merge) 공유할 수 있다.
비유해서 말하자면,
- Git = 게임에서 세이브/로드
- GitHub/GitLab = 세이브 파일을 팀이 같이 쓰는 클라우드 보관함
Git이 파일을 관리하는 3단계
Git은 파일을 이렇게 3단계로 본다.
- Working Directory: 내가 그냥 수정 중인 상태(아직 저장 전)
- Staging Area: “이 변경은 저장할래!” 하고 선택해서 올려둔 공간 (git add)
- Repository: 진짜로 저장된 상태(세이브 포인트) (git commit)
즉, 실무에서 가장 중요한 흐름은 항상 다음과 같다.
수정 → add → commit
실무에서 안전하게 활용하는법
작업하기 전에 습관처럼 치면 깃을 관리하다 사고가 터질 일을 줄일 수 있다.(꼭! 확인하자)
git status
git log --oneline --decorate -n 10
git branch
- git status : 지금 뭐가 바뀌었는지(수정/스테이징 여부)
- git log ... : 최근 세이브 기록(커밋)을 빠르게 확인
- git branch : 내가 지금 어느 브랜치에 있는지 확인
저장소 시작: init vs clone
새 프로젝트에 Git 적용
git init
- 현재 폴더에 .git이라는 버전관리용 폴더가 생긴다.
기존 레포를 내려받아 시작(실무에서 제일 흔한 패턴)
git clone 레포주소
예:
git clone https://github.com/org/project.git
- 실무는 보통 이미 팀 레포가 있어서 clone이 더 많이 쓰인다.
- clone하면 원격 저장소(origin)도 자동으로 연결된다.
변경 확인: status / diff
상태 확인
git status
여기서 눈여겨 봐야할 점은 다음과 같다.
- modified: 파일 바뀜(아직 저장 전)
- staged: add 됨(저장 준비 완료)
- untracked: Git이 아직 모르는 새 파일
어떤 내용이 바뀌었는지 보기
git diff
- 아직 add 안 한 변경 확인
스테이징된 변경만 보고 싶으면
git diff --staged
저장(커밋)하기: add → commit
스테이징(add)
파일 하나만
git add app.js
전부
git add .
변경을 ‘조각’ 단위로 골라 담기(실무에서 유용하게 사용 가능하다.)
git add -p
- 한 파일에 버그 수정 + 포맷팅이 섞였을 때, 버그 수정만 먼저 커밋하고 싶다면 add -p를 통해서 커밋할 수 있다.
커밋(commit): 세이브 포인트 만들기
git commit -m "Fix login button click bug"
기록 보기
git log --oneline
브랜치 흐름까지 한눈에
git log --oneline --graph --decorate --all
브랜치: main에 바로 작업하지 않기(실무 핵심)
실무에서 main(또는 master) 브랜치는 보통 항상 배포 가능한 상태를 유지하는 경우가 많다.
따라서 새 기능/버그수정은 보통 이렇게 브랜치를 새로 따서 최대한 작은 작업 단위로 작업한 후 변경하는 경우가 많다.
브랜치 만들고 이동
git switch -c feature/login
과거의 방식(나는 이 방법을 주로 사용했었는데 과거의 방식이였다.)
git checkout -b feature/login
브랜치 이동
git switch main
합치기(merge)
git switch main
git merge feature/login
실무는 보통 merge 자체를 로컬에서 직접 하기보단, GitHub에서 PR(Pull Request) 만들어서 리뷰 받고 머지하는 흐름이 많다.
원격(Remote): GitHub와 주고받기 (pull / push)
원격 연결 상태 확인
git remote -v
원격 저장소 연결(init로 시작했을 때)
git remote add origin 레포주소
원격에서 최신 가져오기
git pull
- 쉽게 말하면 “원격 최신 상태를 내 컴퓨터에 받아서 합치는 것”
내 커밋을 원격으로 올리기
처음 한 번은 이렇게 진행하도록 하자.
git push -u origin feature/login
- -u는 “다음부터 git push만 쳐도 이 브랜치로 올려!” 설정이라고 보면 된다.
충돌(Conflict)
충돌은 보통 pull이나 merge할 때 발생한다.
- 어떤 파일에서 충돌 났는지 확인
git status
- 충돌 파일 열면 이런 표시가 존재할것이다.
<<<<<<< HEAD
내 변경
=======
상대 변경
>>>>>>> branch-name
- 사람이 최종 결과로 정리하고 위 표시들을 삭제
- 그다음 저장하고
git add 충돌파일
git commit
되돌리기/복구
add 취소(스테이징 취소)
git restore --staged 파일
파일 수정 취소(주의: 변경 내용 사라질 수 있음)
git restore 파일
마지막 커밋 메시지/내용 수정(amend)
git commit --amend -m "새 메시지"
- 방금 커밋을 ‘덮어쓰기’ 느낌
- 이미 원격에 push한 커밋을 amend하면 팀이랑 히스토리가 꼬일 수 있어서 조심해야한다.
협업에서 안전한 되돌리기(revert)
git revert 커밋해시
- 과거 커밋을 삭제하는 게 아니라 취소 커밋을 새로 만든다
- 그래서 협업에서 안전하게 사용할 수 있다.
강력하지만 위험한 reset(사용 주의!)
git reset --hard 커밋해시
- 히스토리 자체를 바꿀 수 있어 위험하다.
- 혼자 작업 중이고 원격에 push 안 했을 때만 신중히 사용하도록 하자.
마무리
Git은 처음엔 명령어가 많아 보여도, 실무에서 자주 쓰는 건 정해져 있는것을 알 수 있다.
status → diff → add → commit → push
그리고 main에 바로 작업하지 않고 브랜치로 작업하는 습관만 잡아도 팀 협업이 훨씬 안전해지니 습관을 들이도록하자. 무조건 작업을 하나 시작하기전엔 일단 작업 브랜치 따고 생각하기!