Commit
Commit
staging area의 현 상태를 그대로 하나의 버전으로 남기는 작업, 또는 그 결과물
커밋이 담고 있는 정보
- 커밋을 한 사용자 아이디
- 커밋한 날짜, 시간
- 커밋 메시지
커밋 메시지 작성 가이드라인
(1) 커밋 메시지의 제목과 상세 설명 사이에는 한 줄 비우기.

1번이 커밋 메시지의 제목(title), 2번이 커밋 메시지의 상세 내용(body)
(2) 커밋 메시지의 제목 뒤에 온점(.) 붙이지 말것
(3) 커밋 메시지의 제목의 첫 번째 알파벳은 대문자로 시작
(4) 커밋 메시지의 제목은 명령어로 작성 (Fix it / Fixed it / Fixes it)
(5) 커밋의 상세 내용에 아래와 같이 작성하면 좋음
- 왜 커밋을 했는지
- 어떤 문제가 있었고
- 적용한 해결책이 어떤 효과를 가지는지
(6) 다른 사람들이 이해하기 쉽게 최대한 친절하게 작성
커밋할 때 주의사항
(1) 하나의 커밋에는 하나의 수정사항, 하나의 이슈(issue)를 해결한 내용만 남기기
-> 최대한 작은 단위의 변화를 기준으로 커밋
(2) 현재 프로젝트 디렉토리의 상태가 그 내부의 전체 코드를 실행했을 때 에러가 발생하지 않는 상태인 경우에만 커밋
커밋 히스토리
이때까지 한 커밋들
- git log : 커밋 히스토리들을 보여줌
- git log --pretty=oneline : 커밋 히스토리들을 간소화해서 보여줌 (한줄로 출력)
- git show : 커밋 히스토리 중 특정 커밋에 대한 정보 보여줌
-m 옵션 없이 커밋 메시지 남기기
- git commit
Add one function
calculator.py supports 3 functions now

복잡하고 긴 커밋 메시지를 남기기에 쉽다.
최근 커밋 수정
- git commit --amend

최신 커밋의 내용을 수정해서 다시 새로운 커밋으로 만든다. (i 입력 후 내용 수정 -> ESC -> :wq)
Aliasing
: 별명 붙이기
git config
git config alias.history 'log --pretty=oneline'
이렇게 쓰고 실행하면 앞으로 git history 라고만 써도 자동으로 git log --pretty=oneline 을 실행함.
git reset
HEAD : 커밋 히스토리에서, 보통 가장 최근에 한 커밋을 가리킴 -> 매번 더 새로운 커밋을 가리킴
- git reset [커밋 아이디] : HEAD가 과거의 커밋[커밋 아이디]을 가리키게 할 수 있음.
* git reset 3가지 옵션
- git reset --soft [커밋 아이디]
- git reset --mixed [커밋 아이디]
- git reset --hard [커밋 아이디]
| git reset [옵션] eea5 | working directory |
staging area |
repository |
| --soft | 안 바뀜 | 안 바뀜 | HEAD가 eea5 커밋 가리킴 |
| --mixed | 안 바뀜 | eea5 커밋처럼 바뀜 | HEAD가 eea5 커밋 가리킴 |
| --hard | eea5 커밋처럼 바뀜 | eea5 커밋처럼 바뀜 | HEAD가 eea5 커밋 가리킴 |
Commit 정리
- git log : 커밋 히스토리 출력
- git log --pretty=oneline : --pretty 옵션을 사용하여 커밋 하나 당 한 줄씩 출력
- git show [커밋 아이디] : 특정 커밋에서 어떤 변경사항 있었는지 확인
- git commit --amend : 최신 커밋을 수정해서 새로운 커밋으로 만듦
- git config alias.[별명][커맨드] : 길이가 긴 커맨드에 별명을 붙여 이후 별명으로 해당 커맨드 실행할 수 있도록 설정
- git diff [커밋 A 아이디][커밋 B 아이디] : 두 커밋 간 차이 비교
- git reset [옵션][커밋 아이디] : 옵션 생략 시 --mixed 옵션 적용
- HEAD가 특정 커밋을 가리키도록 이동시킴(--soft, --mixed, --hard)
- staging area도 특정 커밋처럼 리셋(--mixed, --hard)
- working directory도 특정 커밋처럼 리셋(--hard)
- git tag [태그이름][커밋 아이디] : 특정 커밋에 태그를 붙임