커밋 다루기
커밋 히스토리 살펴보기
git log
: 커밋 히스토리 보기 / 위로 올라갈수록 더 최근에 한 커밋임
- 커밋 아이디(커밋 해시):
git log --pretty=oneline
: 커밋 하나의 정보가 한줄에 보임
--pretty 옵션
git show 46ca
: 해당 커밋에서 어떤 파일이 어떻게 변했는지 알고 싶을 때
커밋 아이디는 앞에서 4개 정도만 적어줘도 됨
m 옵션 없이 커밋 메시지 남기기
git commit
만 실행하기
- 그 다음 뜨는 텍스트 에디터인 vim 창에 커밋 메시지 남기기
- 장점: 복잡하고 긴 커밋 메시지를 쉽게 남길 수 있음
최신 커밋 수정하기
git commit --amend
: 최신 커밋을 수정해서 다시 새로운 커밋으로 만들기
커밋 생성, 커밋 메시지 작성 가이드라인
커밋 정보
- 커밋을 한 사용자 아이디
- 커밋한 날짜, 시간
- 커밋 메시지
커밋 메시지 작성 가이드라인
- 커밋 메시지의 제목과 상세 설명 사이에는 한 줄을 비우기
- 커밋 메시지의 제목 뒤에 온점
.
붙이지 말기
- 커밋 메시지의 제목의 첫 번째 알파벳은 대문자로 작성하기
- 커밋 메시지의 제목은 명령조로 작성하기(Fix it
/ Fixed it / Fixes it)
- 커밋 상세 내용 추천 항목
- 왜 커밋을 했는지
- 어떤 문제가 있었고
- 적용한 해결책이 어떤 효과를 가지는지
- 다른 사람들이 자신의 코드를 바로 이해할 수 있다고 가정하지 말고 최대한 친절하게 작성하기
커밋 가이드라인
- 하나의 커밋에는 하나의 수정사항, 하나의 이슈(issue)를 해결한 내용만 남기기
- 현재 프로젝트 디렉토리의 상태가 그 내부의 전체 코드를 실행했을 때 에러가 발생하지 않는 상태인 경우에만 커밋하기
- 커밋으로 보관된 특정 시점의 전체 코드는 항상 문제없이 실행되는 상태여야 함
- 과거 버전의 프로그램을 사용해야하거나
- 과거 커밋을 시작점으로 한 다른 방향의 별도 프로젝트를 시작하거나
- 아예 그 커밋으로 현재 프로젝트를 리셋할 수도 있기 때문
긴 커맨드에 alias 설정하기
- aliasing: 길이가 긴 커맨드 전체에 별명을 붙여서 그 별명을 사용할 수 있도록 해주는 Git의 기능
git config alias.[별명] [커맨드]
git config alias.history 'log --pretty=oneline'
: git log --pretty=oneline
을 git history
라는 별명으로 aliasing 하는 명령어
두 커밋 간의 차이 보기
git diff 이전_커밋_아이디 이후_커밋_아이디
git diff 2741 46ca
HEAD의 의미
- 어떤 커밋 하나를 가리킴
- 상황에 따라 다르지만 보통 가장 최근에 한 커밋을 가리킴
- working directory는 HEAD가 가리키는 커밋에 따라 구성됨
- HEAD가 다른 커밋을 가리키면 워킹 디렉토리 안에 있는 것들은 다르게 바뀔 수 있음
이전 커밋으로 git reset하기
git reset --hard 가고_싶은_커밋_아이디
: HEAD가 과거의 커밋을 가리키게 할 수 있음 -> 워킹 디렉토리의 내용도 과거 커밋의 모습으로 돌아가게 함
과거 커밋으로 아예 돌아가고 싶을 때 사용함
git reset --hard 46ca
git reset의 옵션을 배우기 전에 확실히 알아야 할 부분
- working directory의 내부도 그 과거 커밋의 모습처럼 바뀌는 건
--hard
옵션을 썼기 때문이고 --soft
, --mixed
옵션을 쓰면 그렇지 않음
(HEAD가 과거의 커밋을 가리키게 되는 결과는 git reset
에서 어느 옵션을 쓰든 항상 똑같음)
- staging area에 있던 것들은 커밋을 하더라도 그것과 상관없이 계속 남아있음
git reset의 3가지 옵션 I
- git의 세가지 작업 영역 중 몇개의 영역까지 리셋을 하느냐로 구분할 수 있음
git reset [옵션] [커밋 아이디]
: 옵션에 따라 하는 작업이 달라짐(옵션을 생략하면 --mixed 옵션이 적용됨)
- HEAD가 특정 커밋을 가리키도록 이동시킴(--soft는 여기까지 수행)
- staging area도 특정 커밋처럼 리셋(--mixed는 여기까지 수행)
- working directory도 특정 커밋처럼 리셋(--hard는 여기까지 수행)
HEAD를 기준으로 git reset하기
- 커밋 아이디 대신 쓸 수 있는 표현법
HEAD^
: 현재 HEAD가 가리키고 있는 커밋의 바로 이전 커밋을 나타냄
HEAD~x
: 현재 HEAD가 가리키는 커밋보다 x단계 전에 있는 커밋
커밋에 tag 달기
git tag [태그 이름] [커밋 아이디]
git tag
: 프로젝트 디렉토리에 있는 모든 태그를 조회
git show [태그 이름]
: 각 태그와 연결된 커밋이 보기
- 새 버전의 시작점이 되는 커밋처럼, 특히 그 의미가 중요한 커밋들은 태그를 달아주면 나중에 프로젝트의 이력을 파악할 때 도움이 됨