[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까지의 커밋 내용을 취소한 새로한 커밋을 생성
HEAD
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가 브랜치를 가리키지 않고 특정 커밋을 직접 가리키는 상태
- 브랜치 히스토리를 변경하지 않고, 특정 커밋을 기준으로 코드를 확인 또는 실험
- 커밋 유실을 방지하기 위해 주의 필요
Leave a comment