[Git] Commit & HEAD

Commit

1. 개념

  • 현재 파일 시스템의 스냅샷
  • .git 디렉토리 내부에 객체 형태로 저장(Repository 저장)
  • 고유 ID(해시)로 식별
  • 해당 시점으로 돌아갈 수 있는 기준점

Commit 기준

  • 하나의 커밋에는 하나의 수정사항 또는 이슈(기능 또는 논리 단위)
  • 내부 전체 코드 기준으로 에러가 발생하지 않을 때 커밋

커밋 메세지 작성법

  • 제목과 상세 설명 사이에 한 줄 띄기
  • 제목 뒤에 온점(.)X
  • 현재시제 & 명령어
    • ex. Fix typo in README
  • 상세히 작성
    • ex. 문제점과 해결 효과

2. 관련 동작

1. commit 실행 및 변경

  • git commit
  • -m "커밋 메시지" 옵션으로 한 줄에 커밋 메시지와 함께 커밋 가능
  • -m 옵션 없이 텍스트 에디터에 커밋 메시지 기록 가능(긴 커밋 메시지)
  • --amend 옵션으로 최신 커밋을 현재 커밋으로 수정
    • 기존 커밋은 log에서 사라짐

2. 커밋 히스토리 보기

  • git log
  • 커밋 히스토리(사용자ID, 날짜 및 시간, 커밋 메시지) 확인
  • --pretty=oneline옵션으로 한 줄로 확인 가능

3. 변경사항 확인

  • git show 커밋ID
  • -: 이전 커밋 내용
  • +: 해당 커밋 내용
    • 커밋 ID의 일부(ex. 앞 네글자)로도 확인 가능

4. 두 커밋 간 차이 확인

  • git diff 커밋ID_1 커밋ID_2
  • -: 이전 커밋 내용
  • +: 이후 커밋 내용

5. 커밋 취소

  • git revert 커밋ID
  • 특정 커밋을 취소하고 새로운 커밋을 만듦
  • 커밋ID1..커밋ID2를 사용하면 커밋ID1 이후의 커밋부터 커밋ID2까지의 커밋 내용을 취소한 새로한 커밋을 생성

1. 개념

  • Git에서 작업 중인 현재 커밋 버전을 가리키는 포인터
    • HEAD → branch → commit 순으로 가리킴
  • HEAD가 가리키는 커밋 기준으로 working directory 구성
  • 새로운 커밋 → HEAD가 새로운 커밋을 가리키도록 변경

2. 관련 동작

1. 커밋 기록 삭제

  • git reset 커밋ID
  • repository에서 HEAD가 과거의 커밋을 가리키게 함(브랜치와 함께 이동)
  • --soft옵션
    • HEAD만 이동
    • working directory, staging area 유지
  • --mixed옵션(기본값):
    • HEAD 이동
    • staging area 초기화
    • working directory 유지
  • --hard옵션
    • HEAD 이동
    • staging area 초기화
    • working directory 초기화
  • 커밋ID 대신 HEAD^을 사용하면 현재 HEAD가 기리키는 커밋의 이전 커밋을 가리킴
  • 커밋ID 대신 HEAD~x을 사용하면 현재 HEAD가 기리키는 커밋의 x단계 이전의 커밋을 가리킴

2. 커밋에 태그 부여

  • git tag 태그이름 커밋ID
  • 의미가 중요한 커밋에 태그 부여(ex. 주요 버전의 시작점이 되는 커밋)
  • 커밋ID 대신 사용하여 그 이력을 볼 수 있음(ex. git show 태그이름)
  • git tag로 태그 목록 확인

3. Detached HEAD

  • checkout 커밋ID
  • HEAD가 브랜치를 가리키지 않고 특정 커밋을 직접 가리키는 상태
  • 브랜치 히스토리를 변경하지 않고, 특정 커밋을 기준으로 코드를 확인 또는 실험
  • 커밋 유실을 방지하기 위해 주의 필요

Categories:

Updated:

Leave a comment