Git 명령어, 일찍 알았으면 좋았을 텐데

발행: (2026년 2월 5일 오후 05:16 GMT+9)
12 min read
원문: Dev.to

Source: Dev.to


내가 일찍 알았으면 좋았던 Git 명령어들

Git을 사용하면서 “이거 왜 몰랐을까?” 하는 순간이 종종 있습니다.
아래에 소개하는 명령어들은 작업 흐름을 크게 개선시켜 주며, 대부분의 개발자가 한 번쯤은 알면 좋은 것들입니다.


1. 한눈에 보는 커밋 히스토리

git log --oneline --graph --decorate
  • 커밋을 한 줄로 요약하고, 브랜치와 태그를 시각적으로 표시합니다.
  • 복잡한 히스토리를 빠르게 파악할 때 유용합니다.

2. 실수 복구 – reflog

git reflog
  • HEAD가 이동한 모든 기록을 보여줍니다.
  • git reset --hard HEAD@{2} 와 같이 사용해 실수로 삭제한 커밋을 복구할 수 있습니다.

3. 안전하게 커밋 되돌리기 – reset vs revert

상황명령어설명
아직 푸시하지 않은 커밋을 완전히 없애고 싶을 때git reset --hard <commit>워킹 디렉터리와 인덱스를 지정 커밋 상태로 되돌립니다.
이미 푸시한 커밋을 되돌리고 싶을 때git revert <commit>새로운 커밋을 만들어 이전 커밋의 변경 사항을 무효화합니다.

4. 커밋 메시지 수정 – commit --amend

git commit --amend
  • 마지막 커밋에 파일을 추가하거나 메시지만 바꿀 때 사용합니다.
  • 이미 푸시한 경우에는 주의가 필요합니다.

5. 스테이징된 파일 확인 – diff --staged

git diff --staged
  • git add 한 뒤 아직 커밋되지 않은 변경 사항을 확인합니다.

6. 작업 임시 보관 – stash

git stash          # 현재 작업을 임시 저장
git stash list     # 저장된 스택 확인
git stash pop      # 가장 최근 스택을 적용하고 삭제
git stash apply    # 적용만 하고 스택은 유지
  • 급히 브랜치를 바꿔야 할 때 유용합니다.

7. 원격 브랜치 정리 – remote prune

git remote prune origin
  • 원격 저장소에서 삭제된 브랜치를 로컬에 남아 있는 레퍼런스도 함께 정리합니다.

8. 인터랙티브 리베이스 – rebase -i

git rebase -i HEAD~5
  • 최근 5개의 커밋을 선택적으로 편집, 스쿼시, 삭제할 수 있습니다.
  • 깔끔한 히스토리를 만들 때 필수입니다.

9. 특정 커밋만 가져오기 – cherry-pick

git cherry-pick <commit-hash>
  • 다른 브랜치에 있는 하나의 커밋을 현재 브랜치에 적용합니다.

10. 바이섹션 – 버그가 언제부터 생겼는지 찾기

git bisect start
git bisect bad               # 현재 커밋이 버그를 포함
git bisect good <good-hash>  # 버그가 없는 마지막 커밋
# Git이 자동으로 중간 커밋을 체크합니다.
git bisect reset             # 종료
  • 문제의 원인을 빠르게 추적할 수 있습니다.

11. 파일 히스토리 추적 – blame

git blame <file>
  • 각 라인이 언제, 누가 수정했는지 확인합니다.

12. 작업 디렉터리 정리 – clean

git clean -fd
  • 추적되지 않은 파일과 디렉터리를 강제로 삭제합니다.
  • -n 옵션을 먼저 사용해 어떤 파일이 삭제될지 미리 확인할 수 있습니다.

13. 태그 만들기 – tag -a

git tag -a v1.0.0 -m "Release 1.0.0"
git push origin v1.0.0
  • 특정 커밋에 의미 있는 이름을 붙여 배포 버전을 관리합니다.

14. 원격 브랜치 한 번에 삭제

git push origin --delete <branch-name>
  • 로컬에서는 git branch -d <branch-name> 로 삭제하고, 원격에서도 위 명령으로 한 번에 정리합니다.

15. 커밋 내용 빠르게 확인 – show

git show <commit>
  • 해당 커밋의 변경 사항과 메타데이터를 바로 확인합니다.

마무리

위에 소개한 명령어들은 작업 효율을 크게 높여주며, 실수 복구부터 히스토리 정리까지 다양한 상황에서 빛을 발합니다.
필요한 명령어를 메모해 두고, 실제 프로젝트에 적용해 보세요.

“Git은 강력하지만, 올바른 도구를 알면 더 강력해집니다.”

Source:

변경 사항 스태시

기능 작업을 진행 중이고 긴급 리뷰를 위해 깨끗한 작업 디렉터리가 필요할 때:

# Save all your changes to the stash
git stash

# Do your other work...

# Bring your changes back
git stash pop

유용한 스태시 변형

# Stash with a descriptive message
git stash save "halfway through login refactor"

# View all stashes
git stash list

# Apply a specific stash without removing it from the list
git stash apply stash@{2}

# Stash only specific files
git stash push -m "navbar changes" src/components/Navbar.jsx

# Stash including untracked files
git stash -u

버그 찾기를 위한 이분 탐색

일주일 전까지 통과하던 테스트가 갑자기 실패할 때, 이분 탐색으로 문제 커밋을 정확히 찾을 수 있습니다:

# 시작 이분 탐색 세션
git bisect start

# 현재(깨진) 커밋을 나쁨(bad)으로 표시
git bisect bad

# 알려진 정상(good) 커밋을 지정(예: 지난 주 커밋)
git bisect good a1b2c3d

# Git이 중간 커밋을 체크아웃합니다; 테스트 후 Git에 알려 주세요:
git bisect good   # 이 커밋이 정상이라면
git bisect bad    # 이 커밋이 깨졌다면

# 정확한 나쁜 커밋을 찾을 때까지 반복
git bisect reset

자동화된 테스트 스크립트가 있다면:

git bisect start HEAD a1b2c3d
git bisect run npm test

Git이 자동으로 깨진 커밋을 찾아냅니다.

Source:

인터랙티브 리베이스

브랜치에 작은 커밋이나 오타 수정 커밋이 여러 개 있어 머지하기 전에 정리하고 싶을 때:

# 마지막 5개의 커밋을 인터랙티브하게 리베이스
git rebase -i HEAD~5

편집기가 다음과 같은 목록을 보여줍니다:

pick a1b2c3d Add user authentication
pick b2c3d4e Fix typo in auth
pick c3d4e5f Fix typo again
pick d4e5f6g Add logout feature
pick e5f6g7h Forgot semicolon

명령을 다음과 같이 바꿀 수 있습니다:

pick a1b2c3d Add user authentication
squash b2c3d4e Fix typo in auth
squash c3d4e5f Fix typo again
pick d4e5f6g Add logout feature
fixup e5f6g7h Forgot semicolon

명령 의미

  • squash (s): 이전 커밋과 합쳐서 하나로 만들고, 메시지를 결합합니다.
  • fixup (f): 이전 커밋과 합쳐서 하나로 만들고, 이 커밋의 메시지는 버립니다.
  • reword (r): 커밋은 유지하되, 메시지를 편집합니다.
  • drop (d): 커밋을 완전히 삭제합니다.
  • edit (e): 멈추어 커밋을 수정할 수 있게 합니다.

⚠️ Warning: 이미 공유 브랜치에 푸시된 커밋은 절대 리베이스하지 마세요.

편리한 Git 별칭

~/.gitconfig에 추가하면 일상 작업을 빠르게 할 수 있습니다:

[alias]
    # Shorter status
    s = status -sb

    # Pretty log graph
    lg = log --oneline --graph --decorate --all

    # Undo the last commit but keep changes
    undo = reset --soft HEAD~1

    # Amend without editing message
    oops = commit --amend --no-edit

    # Show what you did today
    today = log --since='midnight' --author='Your Name' --oneline

    # Delete all merged branches (except main/master)
    cleanup = "!git branch --merged | grep -v '\\*\\|main\\|master' | xargs -n 1 git branch -d"

    # Quick commit with message
    cm = commit -m

    # Create and switch to a new branch
    cob = checkout -b

이제 git sgit status --short --branch를 대체합니다.

커밋 수정

파일을 추가하는 것을 깜빡했거나 커밋 메시지를 수정해야 하나요?

# Add forgotten file to the last commit
git add forgotten-file.js
git commit --amend --no-edit

# Or just fix the message
git commit --amend -m "Better commit message"

작업 복구

브랜치를 실수로 삭제하거나 너무 강하게 리셋하면, reflog가 모든 것을 기억합니다:

git reflog

일반적인 출력:

a1b2c3d HEAD@{0}: reset: moving to HEAD~3
b2c3d4e HEAD@{1}: commit: Add feature
...

이전 상태 복구:

git checkout b2c3d4e
# or
git reset --hard b2c3d4e

특정 커밋 체리픽하기

git cherry-pick a1b2c3d

커밋 찾기

# Search commit messages
git log --grep="bug fix"

# Search code changes for a specific string
git log -S "functionName"

# Show commits that touched a specific file (including renames)
git log --follow -p -- path/to/file.js

추적되지 않은 파일 정리

먼저 드라이 런 실행:

git clean -n

추적되지 않은 파일 삭제:

git clean -f

추적되지 않은 파일 및 디렉터리 삭제:

git clean -fd

Quick Reference Table

CommandWhat It Does
git stash변경 사항을 일시적으로 저장합니다
git stash pop저장된 변경 사항을 복원합니다
git bisect버그를 이진 검색합니다
git rebase -i HEAD~n마지막 n 커밋을 인터랙티브하게 리베이스합니다
git commit --amend마지막 커밋을 수정합니다
git reflogHEAD 모든 변경 이력을 봅니다
git cherry-pick특정 커밋을 복사합니다
git log -S "text"특정 텍스트를 변경한 커밋을 찾습니다
git clean -fd추적되지 않은 파일 및 디렉터리를 삭제합니다

Git은 배우기가 어렵지만, 이 명령들을 마스터하면 작업 흐름이 크게 바뀝니다. Git을 두려워하던 제가 이제는 버전 관리 자체를 즐기게 되었어요(대부분은). 이 목록에서 하나의 명령을 골라 이번 주에 사용해 보세요; 몸에 익으면 또 다른 명령을 추가하세요. 즐거운 코딩 되세요! 🚀

Back to Blog

관련 글

더 보기 »