커밋 히스토리 재작성하기

GitBeginner
지금 연습하기

소개

시간 여행을 떠나는 Git 탐험가 여러분, 환영합니다! 여러분에게는 매우 중요한 임무가 주어졌습니다. 바로 일급 비밀 프로젝트의 어지러운 커밋 히스토리를 깔끔하게 정리하는 것입니다. 여러분의 목표는 새롭게 습득한 Git 의 능력, 특히 '대화형 리베이스 (Interactive Rebasing)' 기술을 사용하여 혼란스러운 타임라인을 명확하고 간결한 히스토리로 탈바꿈시키는 것입니다.

과거를 재작성할 수 있는 능력을 가진 역사학자가 되었다고 상상해 보세요. 여러분의 역할은 흩어져 있는 일련의 사건들을 모아 하나의 일관된 이야기로 재구성하는 것입니다. 이것이 바로 Git 의 대화형 리베이스 기능을 통해 여러분이 하게 될 작업입니다. 관련 있는 커밋들을 하나로 합치고, 불필요한 커밋은 제거하며, 커밋 메시지를 수정하여 프로젝트의 개발 과정을 더 명확하게 전달할 수 있습니다.

시간의 흐름 속으로 뛰어들어 세련된 Git 히스토리를 만들어낼 준비가 되셨나요? 시간 여행 모험을 지금 시작해 봅시다!

타임라인 정리하기

과제

챌린지 저장소는 ~/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

여러분의 임무는 다음 작업을 수행하는 것입니다.

  1. 가장 오래된 두 개의 커밋 ("Start secret project"와 "Fix typo in project name") 을 "Initialize secret project"라는 메시지를 가진 하나의 커밋으로 병합하세요.
  2. "Add project codename" 커밋의 메시지를 "Add project codename: Chronos"로 수정하세요.
  3. 가장 최근 커밋인 "Add project description"은 그대로 유지하세요.

요구 사항

이 임무를 성공적으로 완수하려면 다음 요구 사항을 준수해야 합니다.

  • 모든 작업은 ~/project/time-travel-git 디렉토리 내에서 수행되어야 합니다.
  • 커밋 히스토리를 정리하기 위해 반드시 git rebase -i (대화형 리베이스) 명령어를 사용해야 합니다.
  • 최종 히스토리에는 정확히 3 개의 커밋만 존재해야 합니다 (기존 4 개에서 줄어듦).
  • 파일의 내용은 변경되지 않아야 합니다. 오직 커밋 히스토리만 수정하는 것이 목적입니다.
  • 챌린지 완료 후 git log --oneline을 실행했을 때 올바른 메시지를 가진 3 개의 커밋이 보여야 합니다.

힌트

챌린지 수행에 도움이 될 만한 힌트입니다.

  1. 대화형 리베이스를 사용하면 히스토리 내의 커밋을 조작할 수 있습니다. 기본 명령어 형식은 다음과 같습니다.

    git rebase -i <commit>

    여기서 <commit>은 수정하려는 첫 번째 커밋의 바로 이전 커밋을 의미합니다. 가장 첫 번째 커밋부터 수정하려면 다음 명령어를 사용할 수 있습니다.

    git rebase -i --root
  2. 대화형 리베이스 화면이 열리면 커밋 목록과 함께 수행할 수 있는 작업 (Action) 들이 나타납니다. 주요 작업은 다음과 같습니다.

    • pick - 커밋을 그대로 사용함
    • reword 또는 r - 커밋을 사용하되 메시지만 수정함
    • squash 또는 s - 이 커밋을 이전 커밋과 합침
    • fixup 또는 f - squash 와 비슷하지만, 이 커밋의 메시지는 버림
  3. 커밋을 병합하려면 두 번째 커밋에 squash 또는 fixup을 적용하면 됩니다.

  4. 커밋 메시지만 변경하려면 reword 작업을 사용하세요.

  5. 리베이스 계획을 설정한 후 에디터를 저장하고 닫으세요. Git 이 나머지 과정을 안내하며, 커밋 메시지 수정을 위해 필요한 시점에 에디터 창을 다시 열어줄 것입니다.

  6. 리베이스 도중 실수를 했다면 언제든지 다음 명령어로 중단하고 처음부터 다시 시작할 수 있습니다.

    git rebase --abort

예시

챌린지를 완료한 후 git log --oneline 결과는 다음과 유사해야 합니다 (커밋 해시는 다를 수 있습니다).

abc1234 Add project description
def5678 Add project codename: Chronos
ghi9101 Initialize secret project
✨ 솔루션 확인 및 연습

요약

이 챌린지를 통해 여러분은 Git 히스토리를 넘나드는 시간 여행을 마쳤습니다. 과거를 재구성하고 더 깔끔하고 논리적인 커밋 히스토리를 만들 수 있게 해주는 강력한 도구인 대화형 리베이스 기술을 마스터했습니다.

커밋을 병합하고, 메시지를 수정하고, 변경 사항을 재조직함으로써 무질서했던 사건의 나열을 일관된 서사로 탈바꿈시켰습니다. 이러한 기술은 실제 프로젝트에서 매우 가치 있게 쓰입니다. 깔끔하고 이해하기 쉬운 히스토리를 유지하는 것은 협업 효율성과 프로젝트 관리 능력을 크게 향상시키기 때문입니다.

하지만 큰 힘에는 큰 책임이 따른다는 점을 명심하세요. 히스토리 재작성은 로컬 브랜치나 개인 프로젝트에서는 매우 유용하지만, 공유 브랜치에서는 주의해서 사용해야 합니다. 공유된 히스토리를 수정하기 전에는 항상 팀원들과 소통하세요.

앞으로의 Git 여정에서도 이러한 기술들을 계속 연마해 나가시기 바랍니다. 히스토리를 다루는 능력은 단순히 정리 정돈을 넘어, 프로젝트가 진화해 온 과정을 명확한 이야기로 엮어내는 예술과도 같습니다. 여러분의 앞날에 깔끔한 Git 히스토리와 충돌 없는 머지, 그리고 언제나 의미 있는 커밋이 가득하기를 바랍니다!