change ID나 commit ID 대신 사람이 읽기 쉬운 텍스트 설명으로 커밋을 다루는 방법과, 설명 변경 시 commit ID가 어떻게 달라지는지 소개합니다.
변경 사항을 change ID나 commit ID로 가리킬 수는 있지만, 그것이 항상 좋은 방법은 아닙니다. 사람이 이해하기에는 텍스트가 훨씬 더 좋은 설명 방식입니다.
하지만 커밋을 설명하기 전에, 먼저 jj가 우리가 누구인지 알 수 있게 해야 합니다. 간단한 설정을 해 봅시다:
$ jj config set --user user.name "Steve Klabnik"
$ jj config set --user user.email "steve@steveklabnik.com"
물론 저가 아니라면, 여기에 자신의 이름과 이메일을 넣어야 합니다. 좋습니다, 이 준비가 끝났으니 이제 몇 가지 변경 사항에 설명을 붙일 준비가 되었습니다.
원할 때마다 jj describe로 변경 사항을 설명할 수 있습니다. 가장 간단한 사용법은 -m, 즉 "message" 플래그를 사용하는 것입니다. 이렇게 하면 설명을 명령줄에서 바로 전달할 수 있습니다:
$ jj describe -m "hello world"
Working copy now at: yyrsmnoo 524d2bf4 hello world
Parent commit : zzzzzzzz 00000000 (empty) (no description set)
(여기서 change ID가 바뀐 것을 눈치챌 수도 있습니다. 이것은 그냥 책을 쓰기 위한 약간의 마법입니다. 저는 이 책을 수동으로 편집하고 있어서, 조정하는 과정에서 여러분이 보게 되는 change ID와 commit ID가 제가 가진 것과 달라질 수 있습니다. 금방 감을 잡게 될 테니, 자신이 입력한 명령과 그에 따른 출력만 맞춰 보면 괜찮습니다.)
우리의 메시지인 hello world가 (no description set) 텍스트를 대체했습니다. 이제 저장소의 히스토리를 볼 때마다 이것을 확인할 수 있게 됩니다.
하지만 더 실제적인 변경 사항에서는 아마 -m 플래그를 사용하지 않고 싶을 것입니다. 그리고 설명은 언제든지 설정할 수 있으므로, 나중에 바꾸는 것도 가능합니다. 다시 한 번 해 봅시다:
$ jj describe
편집기가 나타날 것입니다. 저는 Windows를 사용하고 있으므로 notepad가 열립니다.

이 창에는 원래 메시지인 "hello world"와 JJ:로 시작하는 여러 줄이 보입니다. 마지막 줄에서 언급하듯이, 이런 줄들은 커밋 설명을 만들 때 무시됩니다. 그러니 다음과 같이 더 긴 설명을 작성해 봅시다:
hello world
This is an initial "Hello, world!" implementation, nothing fancy.
More fun stuff to come.
JJ: This commit contains the following changes:
JJ: A .gitignore
JJ: A Cargo.lock
JJ: A Cargo.toml
JJ: A src\main.rs
JJ: Lines starting with "JJ: " (like this one) will be removed.
저장하고 닫으면 다음과 같은 출력이 나타납니다:
Working copy now at: yyrsmnoo ac691d85 hello world
Parent commit : zzzzzzzz 00000000 (empty) (no description set)
우리가 보는 것은 첫 줄뿐이지만, 나머지 내용도 여전히 들어 있습니다.
눈썰미 좋은 독자라면 또 다른 변화 하나를 알아챌 수도 있습니다. 이 출력 두 개를 나란히 놓아 봅시다:
Working copy now at: yyrsmnoo 524d2bf4 hello world
Working copy now at: yyrsmnoo ac691d85 hello world
설명을 바꾸자 commit ID가 바뀌었습니다! 그래서 두 종류의 ID가 모두 있는 것입니다. change ID는 바뀌지 않았지만 commit ID는 바뀌었습니다. 덕분에 시간이 지나며 커밋을 발전시킬 수 있으면서도, 그 모든 버전을 안정적으로 가리킬 수 있는 방법은 그대로 유지됩니다.
이 이야기는 나중에 다시 더 다룰 것입니다. 그전에 먼저 새 변경 사항을 만드는 방법을 보여드리고 싶습니다.