튜토리얼: Git 커밋 메시지 업데이트

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

가끔 브랜치에 몇 번 커밋을 한 후, 하나 이상의 커밋 메시지를 업데이트해야 할 필요성을 느낍니다. 아마도 오타를 발견했거나, 어떤 자동화 도구에서 커밋 메시지가 프로젝트의
커밋 메시지 지침과 완전히 일치하지 않는다고 경고했을 수 있습니다.

메시지를 업데이트하는 것은 커맨드 라인 인터페이스(CLI)에서 Git을 사용하는 데 익숙하지 않다면 복잡할 수 있습니다. 하지만 걱정하지 마세요. GitLab UI에서만 작업한 경험이 있더라도, CLI를 사용하는 다음 단계를 따라 할 수 있습니다.

이 튜토리얼에서는 다음과 같은 두 가지 경우에 커밋 메시지를 수정하는 방법을 설명합니다:

  • GitLab UI에서만 작업하는 경우, 1단계에서 시작하세요.
  • 이미 로컬에 저장소를 클론한 경우, 2단계로 건너뛰어도 됩니다.

커밋 메시지를 원하는 만큼 새로 작성하려면:

  1. 프로젝트의 저장소를 로컬 머신에 클론하세요.
  2. 로컬에서 브랜치를 가져오고 체크아웃하세요.
  3. 커밋 메시지를 업데이트하세요.
  4. 변경 사항을 GitLab에 푸시하세요.

시작하기 전에

다음이 필요합니다:

  • 업데이트할 커밋이 포함된 Git 브랜치가 있는 GitLab 프로젝트.
  • Git 로컬 머신에 설치됨.
  • 로컬 머신의 커맨드 라인 인터페이스(CLI)에 접근할 수 있는 능력. macOS에서는
    Terminal을 사용할 수 있습니다. Windows에서는 PowerShell을 사용할 수 있습니다. Linux 사용자는
    시스템의 CLI에 익숙할 것입니다.
  • 시스템의 기본 편집기와 친숙해야 합니다. 이 튜토리얼은 편집기가 Vim이라고 가정하지만,
    다른 텍스트 편집기도 작동해야 합니다. Vim에 익숙하지 않다면, Vim 시작하기의 1단계부터 2단계는
    이 튜토리얼 later에서 사용되는 모든 명령어를 설명합니다.
  • 커밋 메시지를 덮어쓸 수 있는 권한이 있어야 합니다. 여러 사람이 동일한 브랜치에서 작업하는 경우,
    먼저 그들과 함께 커밋을 업데이트하는 것이 괜찮은지 확인해야 합니다. 일부 조직에서는
    커밋을 수정하는 것에 대한 규칙이 있을 수 있습니다. 이는 파괴적인 변화로 간주됩니다.

최종 단계에서 커밋 메시지를 덮어쓰려면 GitLab에 인증해야 합니다.
GitLab 계정이 기본 사용자 이름 및 비밀번호 인증을 사용하는 경우, CLI에서 인증하기 위해
two factor authentication (2FA)를 비활성화해야 합니다.
또는, SSH 키를 사용하여 GitLab에 인증할 수 있습니다.

로컬 머신에 저장소 클론하기

첫 번째 단계는 로컬 머신에 저장소의 클론을 가져오는 것입니다:

  1. GitLab에서 프로젝트 개요 페이지의 오른쪽 상단에서 Code를 선택합니다.
  2. 드롭다운 목록에서 옆의 URL을 복사합니다:
    • 기본 사용자 이름 및 비밀번호 인증을 사용하는 경우 HTTPS로 클론을 선택합니다.
    • SSH를 사용하여 GitLab에 인증하는 경우 SSH로 클론을 선택합니다.
  3. 이제 로컬 머신에서 CLI(터미널, PowerShell 등)으로 전환하고, 저장소를 클론할 디렉토리로 이동합니다. 예를 들어, /users/my-username/my-projects/입니다.
  4. git clone을 실행하고 이전에 복사한 URL을 붙여넣습니다. 예를 들어:

    git clone https://gitlab.com/my-username/my-awesome-project.git  
    

    이렇게 하면 my-awesome-project/라는 새로운 디렉토리에 저장소가 클론됩니다.

이제 여러분의 저장소가 컴퓨터에 준비되었으며, Git CLI 명령을 사용할 준비가 되었습니다!

브랜치 가져오기 및 체크아웃

다음으로, 업데이트할 커밋을 포함하는 브랜치를 체크아웃해야 합니다.

  1. CLI에서 이전 단계와 동일한 위치에 있다고 가정하면, cd로 프로젝트 디렉토리로 변경하세요:

    cd my-awesome-project
    
  2. 선택 사항입니다. 방금 저장소를 클론한 경우, 브랜치가 이미 컴퓨터에 있어야 합니다. 하지만 이전에 저장소를 클론하고 이 단계로 건너跳르면, 다음과 같이 브랜치를 가져와야 할 수 있습니다:

    git fetch origin my-branch-name
    
  3. 이제 브랜치가 로컬 시스템에 있다는 사실을 확신했으니, 브랜치로 전환하세요:

    git checkout my-branch-name
    
  4. git log로 올바른 브랜치인지 확인하고 가장 최근 커밋이 GitLab의 브랜치에 있는 커밋과 일치하는지 확인하세요. 로그를 종료하려면 q를 사용하세요.

커밋 메시지 업데이트

이제 커밋 메시지를 업데이트할 준비가 되었습니다:

  1. GitLab에서 커밋 기록을 얼마나 거슬러 올라가야 하는지 확인하세요:

    • 브랜치에 대한 머지 요청이 이미 열려 있다면, Commits 탭을 확인하고 총 커밋 수를 사용할 수 있습니다.
    • 브랜치에서만 작업하는 경우:
      1. Code > Commits로 이동하세요.
      2. 왼쪽 상단의 드롭다운 목록에서 브랜치를 찾으세요.
      3. 업데이트하려는 가장 오래된 커밋을 찾아 그 커밋이 얼마나 거슬러 올라가는지 계산하세요. 예를 들어, 두 번째 및 네 번째 커밋을 업데이트하려면 카운트는 4가 됩니다.
  2. CLI에서 대화형 리베이스를 시작하세요. 이는 커밋을 업데이트하기 위한 Git 프로세스입니다. 이전 단계에서 계산한 커밋 수를 HEAD~의 끝에 추가하세요. 예를 들어:

    git rebase -i HEAD~4
    

    이 예에서 Git은 브랜치의 가장 최근 커밋 4개를 선택하여 업데이트합니다.

  3. Git은 텍스트 편집기를 실행하고 선택한 커밋을 나열합니다. 예를 들어, 다음과 비슷하게 보여야 합니다:

    pick a0cea50 Fix broken link
    pick bb84712 Update milestone-plan.md
    pick ce11fad Add list of maintainers
    pick d211d03 update template.md
    
    # Rebase 1f5ec88..d211d03 onto 1f5ec88 (4 commands)
    #
    # Commands:
    # p, pick <commit> = use commit
    # r, reword <commit> = use commit, but edit the commit message
    # e, edit <commit> = use commit, but stop for amending
    # s, squash <commit> = use commit, but meld into previous commit
    # f, fixup [-C | -c] <commit> = like "squash" but keep only the previous
    #                    commit's log message, unless -C is used, in which case
    # [and so on...]
    
  4. pick 명령은 Git이 변동 없이 커밋을 사용하도록 지시합니다. 업데이트하려는 커밋에 대해서는 pick에서 reword로 변경해야 합니다. i를 입력하여 INSERT 모드로 진입한 후, 텍스트를 편집하기 시작하세요.

    예를 들어, 위 샘플의 두 번째 및 네 번째 커밋의 텍스트를 업데이트하려면 다음과 같이 변경하세요:

    pick a0cea50 Fix broken link
    reword bb84712 Update milestone-plan.md
    pick ce11fad Add list of maintainers
    reword d211d03 update template.md
    
  5. 편집한 텍스트를 저장하세요. Escape를 눌러 INSERT 모드에서 나간 후, :wq를 입력하고 Enter를 눌러 저장하고 종료하세요.

  6. 이제 Git은 각 커밋을 하나씩 처리하며 선택한 명령을 적용합니다. pick으로 표시된 커밋은 변경 없이 브랜치에 추가됩니다. Git이 reword로 표시된 커밋에 도달하면 멈추고 다시 텍스트 편집기를 열어줍니다. 이제 커밋 메시지의 텍스트를 최종적으로 업데이트할 시간입니다!

    • 한 줄의 커밋 메시지만 필요하다면, 텍스트를 필요에 맞게 업데이트하세요. 예를 들어:

      Update the monthly milestone plan
      
    • 커밋 메시지에 제목과 본문이 필요하다면, 이들을 빈 줄로 구분하세요. 예를 들어:

      Update the monthly milestone plan
      
      Make the milestone plan clearer by listing the responsibilities
      of each maintainer.
      

    저장하고 종료하면 Git이 커밋 메시지를 업데이트하고 다음 커밋을 순서대로 처리합니다. 작업이 완료되면 Successfully rebased and update refs/heads/my-branch-name 메시지를 볼 수 있어야 합니다.

  7. 선택 사항입니다. 커밋 메시지가 업데이트되었는지 확인하기 위해 git log를 실행하고 아래로 스크롤하여 커밋 메시지를 확인할 수 있습니다.

변경 사항을 GitLab에 푸시하기

이제 남은 것은 이러한 변경 사항을 GitLab에 푸시하는 것입니다:

  1. CLI에서 변경 사항을 GitLab에 푸시합니다. -f “force push” 옵션을 사용해야 합니다,

    커밋이 업데이트되었기 때문에 강제 푸시는 GitLab의 이전 커밋을 덮어씁니다.

    git push -f origin
    

    터미널이 GitLab에서 커밋 메시지를 덮어쓰기 전에 사용자 이름과 비밀번호를 요청할 수 있습니다.

  2. GitLab의 프로젝트에서 커밋이 업데이트되었는지 확인합니다:

    • 브랜치에 대해 이미 열려 있는 병합 요청이 있는 경우, Commits 탭을 확인합니다.
    • 브랜치에서만 작업하는 경우:
      1. Code > Commits로 이동합니다.
      2. 왼쪽 상단의 드롭다운 목록을 선택하고 브랜치를 찾습니다.
      3. 목록에서 관련 커밋이 이제 업데이트되었는지 확인합니다.

축하합니다! 커밋 메시지를 성공적으로 업데이트하고 GitLab에 푸시했습니다!