타임라인 정리하기
과제
챌린지 저장소는 ~/project/time-travel-git에 준비되어 있습니다. 다음 명령어를 실행하여 초기 커밋 히스토리를 확인하세요.
cd ~/project/time-travel-git
git log --oneline
다음과 같은 4 개의 커밋이 표시될 것입니다 (커밋 해시는 사용자마다 다를 수 있습니다).
886c6ad (HEAD -> master) Add project description
3a87b84 Add project codename
6b4cbb9 Fix typo in project name
0d71e5e Start secret project
여러분의 임무는 다음 작업을 수행하는 것입니다.
- 가장 오래된 두 개의 커밋 ("Start secret project"와 "Fix typo in project name") 을 "Initialize secret project"라는 메시지를 가진 하나의 커밋으로 병합하세요.
- "Add project codename" 커밋의 메시지를 "Add project codename: Chronos"로 수정하세요.
- 가장 최근 커밋인 "Add project description"은 그대로 유지하세요.
요구 사항
이 임무를 성공적으로 완수하려면 다음 요구 사항을 준수해야 합니다.
- 모든 작업은
~/project/time-travel-git 디렉토리 내에서 수행되어야 합니다.
- 커밋 히스토리를 정리하기 위해 반드시
git rebase -i (대화형 리베이스) 명령어를 사용해야 합니다.
- 최종 히스토리에는 정확히 3 개의 커밋만 존재해야 합니다 (기존 4 개에서 줄어듦).
- 파일의 내용은 변경되지 않아야 합니다. 오직 커밋 히스토리만 수정하는 것이 목적입니다.
- 챌린지 완료 후
git log --oneline을 실행했을 때 올바른 메시지를 가진 3 개의 커밋이 보여야 합니다.
힌트
챌린지 수행에 도움이 될 만한 힌트입니다.
-
대화형 리베이스를 사용하면 히스토리 내의 커밋을 조작할 수 있습니다. 기본 명령어 형식은 다음과 같습니다.
git rebase -i <commit>
여기서 <commit>은 수정하려는 첫 번째 커밋의 바로 이전 커밋을 의미합니다. 가장 첫 번째 커밋부터 수정하려면 다음 명령어를 사용할 수 있습니다.
git rebase -i --root
-
대화형 리베이스 화면이 열리면 커밋 목록과 함께 수행할 수 있는 작업 (Action) 들이 나타납니다. 주요 작업은 다음과 같습니다.
pick - 커밋을 그대로 사용함
reword 또는 r - 커밋을 사용하되 메시지만 수정함
squash 또는 s - 이 커밋을 이전 커밋과 합침
fixup 또는 f - squash 와 비슷하지만, 이 커밋의 메시지는 버림
-
커밋을 병합하려면 두 번째 커밋에 squash 또는 fixup을 적용하면 됩니다.
-
커밋 메시지만 변경하려면 reword 작업을 사용하세요.
-
리베이스 계획을 설정한 후 에디터를 저장하고 닫으세요. Git 이 나머지 과정을 안내하며, 커밋 메시지 수정을 위해 필요한 시점에 에디터 창을 다시 열어줄 것입니다.
-
리베이스 도중 실수를 했다면 언제든지 다음 명령어로 중단하고 처음부터 다시 시작할 수 있습니다.
git rebase --abort
예시
챌린지를 완료한 후 git log --oneline 결과는 다음과 유사해야 합니다 (커밋 해시는 다를 수 있습니다).
abc1234 Add project description
def5678 Add project codename: Chronos
ghi9101 Initialize secret project