[Github] Git의 구조와 커밋 관련 명령어

이지민·2025년 10월 20일

깃허브

목록 보기
8/13

1. Git이 커밋을 관리하는 방식

  • Working Directory(Area) : 내가 작업하고 있는 프로젝트의 디렉토리(영역)
  • Staging Area : git add 로 추가한 파일들이 모여있는 공간 (커밋될 준비를 마친 파일들이 모이는 영역)
  • Repository : 커밋들이 모여있는 저장소

  • Untracked : Working Directory에 있는 파일이지만 Git으로 버전 관리를 하지 않는 상태
  • Unmodified: 파일이 추가된 이후 해당 파일이 수정이 없는 상태
  • Modified: 파일이 추가된 이후 해당 파일이 수정되었을 때의 상태
  • Staged: Staging Area에 반영된 상태 (git add 된 상태)



2. git reset (커밋 삭제)

Reset과 관련된 선행 개념

  • head : 현재 내가 위치한 커밋 위치를 가리킴. 일종의 포인터 역할
  • main : 모든 브랜치 중 가장 기본이 되는 브랜치 (default branch)
  • origin : 원격 저장소 (origin은 remote의 별칭)
    • (대부분의 경우는 remote == origin)
    • But, 다른 레포지토리를 fork해온 뒤에 git clone으로 local로 가져온 경우(오픈소스에 기여하는 방식)에는 remote ≠ origin이다. 본래 레포지토리의 upstream 브랜치와도 연결되어 있기 때문이다.

git reset --hard (hard reset)⚠️

  • 가장 강한 수준의 리셋이며 일명 기록말살리셋 → (타노스의 핑거스냅도 반은 살려주는 데 하드 리셋은 흔적도 없이 전부 날립니다 )
  • 특정 커밋으로 되돌리고 난 뒤, 그 시점 이후의 변경 내역들을 모두 제거한다.
    (변경 사항들은 Working directory, Staging area, Repository 어디에서도 찾을 수 없음)
  • remote와 연동되어 있지 않다면, 리셋 시점 이후의 커밋 내용은 사라집니다…
    (reset --hard는 항상 신중하게 사용합시다.)
$ git reset --hard "commit_id"
# commit_id 시점으로 커밋을 되돌리고 시점 이후의 커밋은 아예 날림

git reset --soft (soft reset)

  • 제일 약한 수준의 리셋
  • 특정 커밋으로 되돌리고 난 뒤, 그 시점 이후의 커밋들을 삭제하고 변경 내역들은 staged 상태로 staged aread에 위치한 상태.
  • 커밋 삭제 + 변경 사항들을 git add한 상태git commit 하기 직전의 상태
  • 변경 사항이 staged area에 올라가므로 현재 작업하는 부분과 섞이지 않음

git reset (mixed reset)

  • hard reset과 soft reset의 중간 단계의 리셋
  • 특정 커밋으로 되돌리고 난 뒤, 그 시점 이후의 커밋들만 삭제하고 변경 내역들은 unstaged 상태로 working directory에 남는다.
  • 쉽게 말해, 커밋 삭제 + 변경 사항들을 git add하지 않은 상태 가 된다.



3. git checkout (커밋 이동)

  • 커밋 시점 이동
    # commit id 시점으로 이동
    $ git checkout "commit id"
    
    # head가 가리키고 있는 바로 이전 커밋으로 이동. 
    # ^^는 2번째 전으로 이동, ^^^는 3번째 전으로 이동
    $ git checkout head^
  • 브랜치 생성 및 이동

    # "브랜치 이름"의 브랜치 생성
    git branch "브랜치 이름"
    # "브랜치 이름"의 브랜치로 이동
    git checkout "브랜치 이름"
    # "new_feature"라는 브랜치를 만들고 이동
    git checkout -b "new_feature"
    == (git branch "new_feature" + git checkout "new_feature)
    		```



4. git amend(커밋 수정)

  • amend 명령어는 가장 최근의 커밋 만을 대상으로 함
  • 주로 파일이 누락되거나 오타가 있을 때, 새 커밋을 만들지 않으면서 수정사항을 반영하기 위해 사용됨
  • git add → git amend
# 커밋 메시지를 변경하지 않고 수정
git commit --amend --no-edit
# update commit message로 커밋 메시지 변경
git commit --amend -m "update commit message"
# 수정 후에 git push origin "브랜치 이름" --force를 통해 강제 푸쉬하여 github의 커밋을 수정할 수 있음.
profile
모든 것을 다 기억할 수는 없기에 기록합니다.

0개의 댓글