- 스테이지로 변경 사항을 추가했다면 이제 커밋을 하면 된다. 커밋해서 새로운 버전을 만드는 명령어는 git commit -m "커밋 메시지" or git commit --message "커밋 메시지"이다.
커밋 메시지란 버전을 설명하는 메시지이다. 어떤 파일을 어떻게 변경했고, 왜 이렇게 변경했는지 등의 내용을 담은 일종의 쪽지라고 보면 된다.
커밋 메시지는 제목과 본문으로 이루어져 있으며 본문은 생략 가능하다. 첫 줄에는 제목을 쓰고, 한 줄 띄고 셋째 줄부터 본문을 작성하면 된다.
깃을 통해 새로운 버전을 만들 때는 커밋 메시지를 적기를 권장한다. 커밋 메시지를 적지 않는다면 프로젝트의 규모가 커지고 커밋이 많이 쌓였을 때, 각각의 커밋이 왜 만들어졌고 어떤 변경 사항이 있었는지 파악하기 어렵기 때문이다. 또한 협업 과정에서 개발자들 사이에 중요한 의사소통 수단이 되기도 한다.
- 버전(커밋)이 잘 만들어졌는지 확인해 보자. 저장소의 커밋 목록을 출력하는 명령어는 git log이다.
git log를 입력하면 커밋 해시(학번, 사번과 같이 각 커밋이 가진 고유한 ID), 만든 사람, 커밋이 만들어진 날짜, 커밋 메시지가 출력된다.
커밋 해시 우측의 HEAD -> main은 현재 HEAD가 main 브랜치에 있음을 나타낸다.
HEAD란 기본적으로 현재 작업 중인 브랜치의 최신 커밋을 가리키는 일종의 표시이다.
- git commit -am "커밋 메시지" 명령어로 스테이지에 추가와 커밋을 동시에 할 수도 있다. 이 명령어는 git commit -a -m "커밋 메시지" or git commit --all --message "커밋 메시지"와 같다.
우선 작업 디렉터리에 변경 사항을 만든다. 그리고 git status 명령어로 작업 디렉터리의 상태를 확인하면 Changes not staged for commit:~~ modified: a.txt라고 출력되는데 이는 작업 디렉터리에서 수정한 파일(a.txt)이 아직 스테이지에 올라가지 않았다는 뜻이다.
스테이지 추가와 커밋을 동시에 하기 위한 조건
git commit -am "커밋 메시지" 명령어는 깃이 변경 사항을 추적하는(tracked) 파일에만 사용 가능하다. 즉, 스테이지에 이미 올라와 있거나 한 번이라도 커밋한 적이 있는 파일에만 사용할 수 있다.
깃이 기존에 변경 사항을 추적하지 않는(untracked) 파일은 이 명령어를 사용할 수 없다.
관리 대상(tracked) 파일과 관리 대상이 아닌(untracked) 파일
스테이지에 올라왔거나 한 번이라도 커밋된 적 있는 파일은 깃이 변경 사항을 추적한다. 이런 파일을 'tracked 상태'에 있는 파일이라 한다.
스테이지에 올라가지 않고 커밋된 적 없는 파일(즉, 깃이 기존에 변경 사항을 추적하지 않았던 새로 생성된 파일)을 'untracked 상태'에 있는 파일이라 한다.
- git commit -m "커밋 메시지"와 git commit -am "커밋 메시지" 명령어 속 커밋 메시지는 커밋 메시지의 제목을 나타낸다. 즉, 이 두 명령어는 커밋 메시지의 본문은 생략하고 간단하게 제목만 적을 때 사용하는 명령어이다.
본문까지 작성하려면 git commit 명령어를 사용하면 된다. 우선 변경 사항을 만들고 스테이지에 추가한다.
- git commit을 입력하면 커밋 메시지를 작성할 수 있는 Vim(편집기)이 나온다. 여기서 제목과 본문을 포함한 자세한 커밋 메시지를 작성하면 되는데, 바로 입력이 안 된다. Vim에서 무언가를 작성하려면 입력 모드로 전환해야 한다. 입력 모드 전환키는 a 또는 i 이다. 하단에 INSERT가 나온다면 입력 모드로 전환된 것이다.
- 커밋 메시지 제목은 첫 번째 줄에 작성한다. 커밋 메시지의 본문은 제목에서 한 줄 띄고, 세 번째 줄부터 작성하면 된다.
- 이제 작성한 커밋 메시지를 저장하면 커밋이 된다. 저장하려면 우선 입력 모드에서 명령 모드로 전환해야 한다. 명령 모드 전환키는 ESC이다. 하단의 INSERT가 사라지면 명령 모드로 전환된 것이다.
여기서 :write 또는 :w를 입력한 뒤 ENTER를 누르면 작성한 내용이 저장된다. 그리고 :quit 또는 :q를 입력한 뒤 ENTER를 누르면 입력 창이 닫힌다. 또는 :wq를 입력하고 ENTER를 눌러도 된다. :wq는 :w와 :q를 동시에 입력하는 것과 같다.
