개발/기타

[Git] Git 주요 명령어

귀뚜래미 2025. 6. 13. 02:07

1. commit

정의

  • 작업 디토리의 변경 내용을 스테이징 영역을 거쳐 로컬 저장소(Local repository)에 영구히 기록하는 작업.

 

설명·특징

  • 스냅샷 단위로 코드 상태를 기록
  • 커밋 메시지는 “무엇을, 왜 바꿨는지” 간결하고 구체적으로 작성
  • 해시(예: a1b2c3d)로 고유 식별

예시

git add PlayerController.cs
git commit -m "플레이어 이동 로직 개선: 속도 보간 적용 및 버그 수정"

 

 

 

2. branch

정의

  • 커밋 히스토리의 분기점(포인터). 메인 히스토리와 독립된 개발 흐름을 동시에 관리할 수 있음. 

설명·특징

  • 기본 브랜치는 main 또는 master
  • 가벼운 포인터이므로 생성·삭제가 매우 빠름
  • 기능별(feature), 버그 수정(hotfix), 실험(experiment) 등 용도별로 분리

예시

git branch feature/player-animation  # 브랜치 생성
git branch                           # 브랜치 목록 확인

 

 

3. checkout

정의

  • 작업 디렉토리를 지정한 브랜치나 커밋 상태로 전환(switch)

설명·특징

  • git checkout 브랜치명 으로 브랜치 전환
  • 커밋 해시 또는 태그로 이동 가능 (git checkout a1b2c3d)

예시

git checkout feature/player-animation

 

 

4. cherry-pick

정의

  • 특정 커밋 하나(또는 여러 개)의 변경 이력만 현재 브랜치로 가져오는 명령

설명·특징

  • 선택적 코드 병합: 불필요한 히스토리 전체가 아니라 필요한 부분만
  • 충돌(conflict) 발생 시 수동 해결

예시

git checkout hotfix/critical-bug
git cherry-pick a1b2c3d   # main 브랜치의 특정 버그 수정 커밋만 가져오기

 

 

5. reset

정의

  • 브랜치의 HEAD를 지정한 커밋으로 이동시키고, 스테이징 영역과(또는) 작업 디렉토리를 조정

설명·특징

  • --soft: HEAD만 이동, 스테이징 유지, 커밋 취소 후 바로 다시 커밋하거나 수정할 때 유용
  • --mixed(기본): HEAD 이동 + 스테이징 초기화, 워킹 디렉토리는 그대로
  • --hard: HEAD 이동 + 스테이징·워킹 디렉토리 모두 지정 커밋 상태로 되돌림(주의!)

예시

git reset --soft HEAD~1    # 마지막 커밋만 취소, 수정 사항은 스테이지된 상태로 유지  
git reset --mixed HEAD~2   # 마지막 두 커밋 취소, 수정 사항은 언스테이지된 상태  
git reset --hard HEAD~3    # 마지막 세 커밋 + 작업 디렉토리 완전 초기화

 

 

6. revert

정의

  • 지정한 커밋을 “되돌리는(revert)” 새로운 커밋을 생성해 히스토리를 안전하게 유지

설명·특징

  • 지정한 커밋의 변경 내용을 역으로 적용하는 새 커밋을 생성
  • 원격에 이미 푸시된 커밋이라도 안전하게 “되돌리기” 가능

예시

# [Revert "원본 커밋 메시지"] 형태의 새 커밋이 찍히고, 원본 커밋 이력은 그대로 유지됨

git revert a1b2c3d       # a1b2c3d 커밋 내용과 반대되는 커밋 추가

 

 

7. rebase

정의

  • 한 브랜치의 커밋들을 다른 브랜치 기반으로 “다시 적용”(재배치)

설명·특징

  • 히스토리 정리: 커밋 직렬화(선형화)
  • 충돌 발생 시 순차 해결
  • 공개 브랜치(release, main)에 적용 시 동료에게 혼란 초래할 수 있으므로 주의

예시

git checkout feature/login
git rebase main         # feature/login 커밋들을 main 최신 커밋 위로 재배치

 

 

8. merge

정의

  • 두 브랜치의 공통 조상부터 HEAD까지 변경 이력을 합치는 작업

설명·특징

  • HEAD가 가리키는 브랜치가 main이 된다.
  • git merge feature/login 명령어는 feature/login 브랜치의 변경 이력을 현재(Main) 브랜치 위로 합.
  • 충돌(conflict) 없으면
    • Fast-forward 가능 시 포인터만 이동
    • 불가능 시 3-way 머지(merge commit) 생성
  • main 브랜치에 feature/login의 모든 변경 사항이 포함됨.
  •  d이후 main에서 git log --graph를 하면 두 브랜치가 합쳐진 히스토리 확인 가능

예시

git checkout main            # ① main 브랜치로 이동  
git merge feature/login      # ② feature/login의 커밋들을 현재(main) 브랜치에 병합

 

 

 

main과 HEAD의 의미

main

  • 기본(primary) 브랜치 이름(과거에는 master 사용)
  • 보통 “정식 배포” 또는 “항상 안정된 상태”를 유지하기 위해 사용
  • 팀마다 컨벤션에 따라 변경 가능 (develop, production 등)

HEAD

  • 현재 작업 중인 커밋(또는 브랜치 포인터) 를 가리키는 심볼릭 레퍼런스
  • 예시
    • HEAD -> main 이면, 현재 main 브랜치의 최신 커밋 위치
    • 특정 커밋 해시를 체크아웃하면 HEAD는 브랜치가 아닌 “Detached HEAD 상태”로 그 커밋 자체를 가리킴
  • HEAD 역할
    1. 커밋, merge, reset 등의 기준점
    2. git status, git log에서 “현재 어디에 있는지” 표시
# HEAD 확인
git rev-parse --abbrev-ref HEAD  # 현재 브랜치 이름 출력 (or “HEAD” if detached)

 

 

reset vs revert 의 구체적 차이

구분 git reset git revert
목적 브랜치의 포인터(HEAD)를 이전 커밋으로 이동 지정 커밋을 “되돌리는” 새로운 커밋을 생성
히스토리 수정 이력 자체를 삭제/변경 이력은 보존 (반대 동작 커밋만 추가)
협업 안전성 위험 (원격에 이미 푸시된 커밋을 reset하면 충돌) 안전 (원격 히스토리 보존 → 푸시해도 무해)
사용 예시 git reset --hard HEAD~1 git revert HEAD~1
효과 on Disk 커밋 + 스테이지 + 워킹 디렉토리 상태 모두 제어 워킹 디렉토리에는 변경 사항 그대로, 새 커밋만 추가

 

 

자주 쓰이는 Git 명령·옵션 요약

명령어 / 옵션 설명

명령어 / 옵션 설명
git add <파일> 스테이징 영역에 변경 추가
git add -p 변경을 한 덩어리씩 선택해서 스테이징
git commit -m "<메시지>" 인라인 커밋 메시지
git commit --amend 마지막 커밋 메시지·내용 수정
git branch -d <브랜치> 로컬에서 삭제 (머지된 브랜치만)
git branch -D <브랜치> 로컬에서 강제 삭제 (머지 여부 상관없음)
git checkout -b <브랜치> 새 브랜치 생성 + 체크아웃
git checkout <브랜치> 기존 브랜치로 전환
git fetch --prune 원격에 없는 브랜치 정보 로컬에서도 정리
git pull --rebase 병합 커밋 없이 내 커밋을 최신 원격 뒤로 재배치(rebase)
git merge --no-ff fast-forward 없이 병합 커밋 생성
git merge --squash 여러 커밋을 하나로 합쳐서 병합
git push -u origin <브랜치> 원격에 최초 푸시 시 트래킹 설정
git push origin --delete <브랜치> 원격 브랜치 삭제
git push origin --tags 로컬 태그를 원격에 모두 푸시
git log --graph --decorate --all --oneline 커밋 그래프를 한눈에 보기
git diff 워킹 디렉토리와 스테이징 영역 차이 보기
git diff --staged 스테이징 영역과 마지막 커밋 차이 보기
반응형