발행일

깃 명령어 정리 — 치트시트와 실무에서 걸린 지점

깃 명령어 정리

기본 설정

목적명령어
사용자 이름 설정git config --global user.name "이름"
사용자 이메일 설정git config --global user.email "이메일"
설정 확인git config --list

저장소 초기화 & 클론

목적명령어
Git 저장소 초기화git init
원격 저장소 클론git clone <url>

작업 & 커밋

목적명령어
변경 사항 확인git status
변경 파일 추적 시작git add <파일>
전체 파일 추가git add .
커밋 생성git commit -m "메시지"
커밋 수정 (메시지만)git commit --amend -m "수정된 메시지"

브랜치

목적명령어
브랜치 목록 확인git branch
브랜치 생성git branch <브랜치명>
브랜치 이동git checkout <브랜치명>
브랜치 생성+이동git checkout -b <브랜치명>
브랜치 삭제git branch -d <브랜치명>

병합(Merge) & 충돌

목적명령어
브랜치 병합git merge <브랜치명>
병합 충돌 시 파일 수정 후 커밋git add <파일>git commit

원격 저장소 연결 & 동기화

목적명령어
원격 저장소 추가git remote add origin <url>
원격 저장소 확인git remote -v
푸시git push origin <브랜치명>
git pull origin <브랜치명>
기본 브랜치 설정git push -u origin <브랜치명>

되돌리기 & 리셋

목적명령어
마지막 커밋만 취소 (변경사항은 보존)git reset --soft HEAD~1
마지막 커밋+변경사항 되돌리기git reset --hard HEAD~1
특정 파일 이전 상태로 복원git checkout HEAD <파일>
특정 커밋으로 되돌림 (되돌린 커밋 추가됨)git revert <커밋ID>

로그 & 기록

목적명령어
커밋 로그 확인git log
간단 로그git log --oneline
브랜치 그래프 보기git log --oneline --graph --all

정리 및 기타

목적명령어
캐시된 파일 제거git rm --cached <파일>
.gitignore 반영git rm -r --cached .git add .git commit -m ".gitignore 적용"
임시 저장 (stash)git stash
임시 저장 복원git stash pop

실무에서 자주 쓰는 Git 명령어 TOP 10

  1. git status

→ 지금 상태가 어떤지 확인하는 기본 중의 기본.

  1. git add . + git commit -m "메시지"

→ 변경사항을 저장할 때. (자동화에서도 백그라운드로 항상 쓰이는 조합)

  1. git log --oneline --graph --all

→ 브랜치가 꼬였나? 병합 어떻게 됐지? 시각적으로 확인할 수 있는 명령어.

  1. git checkout -b <브랜치명>

→ 브랜치 새로 만들고 바로 이동.

  1. git merge <브랜치명>

→ 작업 끝난 브랜치 병합할 때. 충돌 발생 여부도 여기서 나옴.

  1. git pull origin <브랜치명>

→ 팀원 작업 최신 코드 가져올 때.

  1. git push origin <브랜치명>

→ 내 작업을 원격으로 올릴 때.

  1. git reset --hard HEAD~1

→ 잘못 커밋했을 때 되돌리기. 위험하지만 강력해.

  1. git stash + git stash pop

→ 갑자기 다른 브랜치로 갈 일 있을 때, 변경사항 임시 저장.

  1. git revert <커밋ID>

→ 실수로 올린 커밋 되돌릴 때, 이건 기록 남기면서 안전하게 되돌림.


실무에서 걸린 지점

1. checkout은 사실 위험한 다의어다

위 표를 보면 checkout이 두 번 나옵니다 — 브랜치 이동(git checkout <브랜치>)과 파일 되돌리기(git checkout HEAD <파일>). 전혀 다른 두 작업이 한 명령어에 얹혀 있어서, 브랜치명과 파일명이 겹치면 의도와 다른 쪽이 실행됩니다. 파일 복원 쪽은 작업 내용을 조용히 덮어쓰는 동작이라 특히 위험하고요. Git 2.23부터 이 문제 때문에 명령이 둘로 갈라졌습니다:

git switch <브랜치>          # 브랜치 이동 전용
git restore <파일>           # 파일 복원 전용 — 덮어쓰기 의도가 명시적

표의 checkout도 여전히 동작하지만, 새로 외운다면 switch/restore 쪽이 실수 여지가 적습니다.

2. reset --hard를 쓰려면 reflog부터 알아야 한다

TOP 10의 8번에 "위험하지만 강력해"라고 적어놨는데, 안전망을 함께 적지 않은 게 문제였습니다. --hard로 날린 커밋은 사라진 게 아니라 참조를 잃었을 뿐이고, git reflog에 HEAD의 이동 기록이 남아 있습니다:

git reflog                   # HEAD가 거쳐온 모든 지점
git reset --hard HEAD@{1}    # 날리기 직전으로 복귀

이걸 모르는 채로 --hard를 쓰는 것과 아는 채로 쓰는 것은 완전히 다른 일입니다. 그리고 원격에 이미 푸시한 커밋은 reset이 아니라 revert가 맞습니다 — 팀원의 히스토리를 다시 쓰게 만들지 않으니까요.

3. 표에 없지만 실제로 가장 값졌던 것 — 커밋 고고학 명령어

이력서와 회고를 쓰려고 2년치 커밋을 뒤질 때 실제로 일한 명령어는 표에 하나도 없었습니다:

git log -S "fetchAndMergeRoutes" --oneline   # 이 코드가 언제 들어오고 나갔나 (pickaxe)
git log --oneline -- src/store/              # 이 디렉터리를 건드린 커밋만
git blame -L 30,40 <파일>                     # 이 줄을 마지막으로 바꾼 커밋

-S(pickaxe)는 특정 문자열이 추가되거나 삭제된 커밋만 골라줍니다. "이 함수가 언제 생겼지 / 언제 사라졌지"에 대한 답이라, 블로그 글의 날짜 오류를 커밋 근거로 교정하는 작업도 전부 이걸로 했어요. 치트시트는 "오늘 쓸 명령어" 위주로 만들게 되지만, 시간이 지나 값진 건 과거를 심문하는 명령어 쪽이었습니다.

커밋을 어떻게 남길지는 커밋 메시지 작성법에 따로 정리했습니다 — 여기의 고고학 명령어들이 잘 동작하려면 결국 커밋이 잘 쪼개져 있어야 하더라고요.