커밋은 파일이나 폴더의 추가, 변경 사항을 저장소에 기록하는 것이다.
git을 통해 무슨 작업을 하든 커밋은 필히 거쳐야 하는 단계이다.
작업의 분기는 커밋을 분기점으로 해야 하고, 변경 사항을 비교하기 위해서는 커밋 구간을 지정하기도 하는 등 커밋은 주요 작업들의 기준이 된다.
4.1. 커밋하기
git commit –m “커밋 로그 메시지 작성”
commit 명령을 실행하고 커밋 로그 메시지를 저장해보자.
![]() | 커밋 로그 메시지는 나중에 알아보기 쉽게, 의미와 목적이 명확하게 전달되도록 작성한다. |
git commit –m “README.md 파일 추가”
[master (root-commit) d002a64] README.md 파일 추가
1 file changed, 1 insertion(+)
create mode 100644 README.md
파일을 수정하고, add
와 commit
, 커밋 로그 메시지를 한번에 실행해보자.
![]() | untracked 상태의 파일은 add 와 commit 을 한번에 실행할 수 없다. |
git commit -a -m "README.md 파일 수정1" //또는 git commit -am
[master 2af686a] README.md 파일 수정1
1 file changed, 1 insertion(+), 1 deletion(-)
4.2. 조회하기
4.2.1. 커밋 해시/id
커밋이 만들어질 때, git은 커밋에 40자리의 SHA-1
해시 값을 만들어 저장한다.
이것을 커밋 해시 혹은 커밋 id라고 부른다.
이 커밋 해시는 항상 고유한 값을 나타내는데 그래서 하나의 커밋만을 참조한다.
git log
commit 2af686a40b6ad0d7d81e3a1ef883f842e4887663
Author: joohee.moon <nt10547@nts-corp.com>
Date: Wed Nov 23 16:10:37 2016 +0900
README.md 파일 수정1
commit d002a644cbcdbf57fe561eb9336fd95751d931ee
Author: joohee.moon <nt10547@nts-corp.com>
Date: Wed Nov 23 15:54:57 2016 +0900
README.md 파일 추가
커밋 해시는 40자리의 SHA-1
해시 값이므로 그대로 사용하는데 무리가 있다. 그래서 git은 SHA-1
해시 값의 접두사를 이용해 커밋을 지정하는 것을 지원한다.
![]() | 보통 SHA-1 해시 값 앞 7자리(혹은 6자리)를 접두사로 사용한다. |
4.2.2. 커밋 히스토리
커밋 히스토리는 저장소 내에서 무슨 일이 있었는지 알려주는 중요한 단서다. 이 히스토리를 이용해 무슨 일이 있었는지를 알아내 앞으로의 작업들을 좀 더 현명하게 해낼 수 있다는 것이다.
git은 커밋 히스토리를 화면에 출력할 수 있을 만큼 출력하고 나서, :
(콜론)을 출력한 상태에서 사용자 입력을 기다린다.
커밋 히스토리는 무제한적으로 늘어날 수 있기 때문에 사용자의 입력을 통해서 중단할지 아니면 계속해서 보여줄지를 결정한다.
q
를 누르면 git log
명령은 중지된다. 아래 방향의 화살표키를 누르면 과거 히스토리를 계속해서 열람할 수 있고 위 방향의 화살표키를 누르면 좀 더 최근의 히스토리를 다시 볼 수 있다.
특정 브랜치를 한정하거나 특정 커밋 해시와 참조를 이용해 조회를 제한하거나 개수 또는 날짜를 제한해서 보는 등 여러 옵션을 조합해서 조회가 가능하다.
git log
명령어만 입력할 경우, 전체 작업의 흐름을 한눈에 파악하기 힘들기 때문에 아래와 같은 명령어 조합을 자주 사용한다.
git log --all --oneline --decorate --graph -10
* 2af686a (HEAD -> master) README.md 파일 수정1
* d002a64 README.md 파일 추가
'모든 브랜치(all
)에서 한줄로(oneline
) 어떤 커밋을 가리키는지(decorate
) 그래프로(graph
) 최근 (10
) 개의 로그(log
)로 제한해서 조회한다.’ 를 뜻한다. 옵션의 순서는 바뀌어도 상관 없다.
4.3. 커밋 간의 차이점
4.3.1. 인덱스와 작업 디렉토리
수정하고 인덱스 하지 않은 변경 사항과 인덱스를 비교해준다.
README.md 파일을 열고 ‘수정2’ 로 수정한 뒤 diff를 입력한다.
git diff
diff --git a/README.md b/README.md
index d2c5bca..33b63a0 100644
--- a/README.md // 인덱스
+++ b/README.md // 작업 디렉토리
@@ -1 +1 @@
-수정1
+수정2
출력 결과에서 index 뒤의 해시 값 중, 첫번째 해시는 인덱스, 두번째 해시는 작업 디렉토리에 해당한다.
4.3.2. 저장소와 인덱스
git diff --cached
4.3.3. 커밋과 커밋
커밋간의 변경사항을 비교해준다.
git diff <커밋 id>..<커밋 id>