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

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

가끔은 브랜치에 몇 번의 커밋을 한 후에 하나 이상의 커밋 메시지를 업데이트해야 할 때가 있습니다. 어쩌면 오타를 발견했거나, 자동화 도구가 커밋 메시지가 프로젝트의 커밋 메시지 지침와 완전히 일치하지 않음을 알려준 것일 수도 있습니다.

커밋 메시지를 업데이트하는 것은 명령줄 인터페이스(CLI)를 사용하는 데 익숙하지 않다면 까다로울 수 있습니다. 하지만 걱정하지 마세요. GitLab UI에서만 작업한 경험이 있다면 이 단계를 따라갈 수 있습니다.

이 튜토리얼에서는 두 가지 경우 모두 커밋 메시지를 다시 작성하는 방법에 대해 설명합니다.

  • GitLab UI에서만 작업하는 경우 1단계부터 시작하세요.
  • 이미 로컬로 리포지터리를 복제한 경우 2단계로 건너뛸 수 있습니다.

어떤 수의 커밋 메시지든 다시 작성하려면:

  1. 프로젝트 리포지터리를 로컬 머신에 복제합니다.
  2. 로컬에서 브랜치를 가져오고 확인합니다.
  3. 커밋 메시지를 업데이트합니다.
  4. 변경 사항을 GitLab에 푸시합니다.

시작하기 전에

다음이 필요합니다 - 업데이트하려는 커밋이 포함된 GitLab 프로젝트와 Git 브랜치 - 로컬 머신에 Git이 설치되어 있어야 합니다. - 로컬 머신의 명령줄 인터페이스(CLI)에 액세스할 수 있어야 합니다. macOS에서는 Terminal을 사용할 수 있습니다. Windows에서는 PowerShell을 사용할 수 있습니다. 리눅스 사용자는 시스템의 CLI에 이미 익숙할 것입니다. - 시스템의 기본 편집기 사용에 익숙해야 합니다. 이 튜토리얼은 편집기로 Vim을 사용한다고 가정하지만, 다른 텍스트 편집기도 작동해야 합니다. Vim을 익숙하게 사용하려면 Vim 시작하기의 1단계에서 2단계까지 나오는 명령을 사용한다고 가정합니다. - 커밋 메시지를 덮어쓸 수 있는 권한이 있어야 합니다. 동일한 브랜치에서 여러 사람과 함께 작업하는 경우 해당 사용자들에게 커밋을 업데이트해도 괜찮은지 먼저 확인해야 합니다. 일부 조직에서는 커밋을 다시 작성하는 것을 파괴적인 변경으로 여기기도 하기 때문입니다.

마지막 단계에서 GitLab에 인증하려면 GitLab 계정이 기본 사용자 이름 및 암호 인증을 사용하는 경우 이중 인증(2FA)를 사용 중지해야 합니다. 또는 SSH 키를 사용하여 GitLab에 인증할 수 있습니다.

리포지터리를 로컬 머신에 복제

첫 번째 단계는 로컬 머신에 리포지터리의 복제본을 가져오는 것입니다.

  1. GitLab에서 프로젝트 개요 페이지에서 오른쪽 상단에 있는 코드를 선택합니다.
  2. 드롭다운 디렉터리에서 다음 옆에 있는 를 선택하여 리포지터리의 URL을 복사합니다.:
    • GitLab 계정이 기본 사용자 이름 및 암호 인증을 사용하는 경우 HTTPS로 복제를 선택합니다.
    • GitLab 인증에 SSH를 사용하는 경우 SSH로 복제를 선택합니다.
  3. 이제 로컬 머신의 CLI(Terminal, PowerShell 또는 유사한 도구)로 이동하여 리포지터리를 복제할 디렉터리로 이동합니다. 예를 들어, /users/my-username/my-projects/입니다.
  4. 다음과 같이 입력하고 이전에 복사한 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에서 커밋 기록에서 얼마나 되돌아 가야 하는지 확인합니다.:

    • 이미 브랜치에 대한 Merge Request이 열려 있는 경우 커밋 탭을 확인하고 전체 커밋 수를 사용합니다.
    • 브랜치에서만 작업하는 경우:
      1. 코드 > 커밋으로 이동합니다.
      2. 왼쪽 상단에서 드롭다운 디렉터리을 선택하고 브랜치를 찾습니다.
      3. 업데이트하려는 가장 오래된 커밋을 찾아 해당 커밋이 얼마나 이전인지 확인합니다. 예를 들어, 두 번째와 네 번째 커밋을 업데이트하려면 숫자를 세어 4가 나와야 합니다.
  2. 명령줄 인터페이스(CLI)에서 커밋을 업데이트하기 위한 Git 프로세스인 대화형 리베이스를 시작합니다. 앞 단계에서 얻은 커밋 수를 HEAD~ 뒤에 더하면 됩니다. 예를 들어:

    git rebase -i HEAD~4
    

    이 예에서 Git은 브랜치의 네 가장 최근의 커밋을 선택합니다.

  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. 편집된 텍스트를 저장합니다. INSERT 모드를 종료하려면 Escape를 누르고 :wq를 입력한 후 Enter를 눌러 저장하고 종료합니다.

  6. 이제 Git은 하나씩 각 커밋을 통과하면서 선택한 명령을 적용합니다. pick이 포함된 모든 커밋이 변경되지 않은 채로 다시 브랜치에 추가됩니다. Git이 reword로 표시된 커밋에 도달하면 멈추고 다시 텍스트 편집기를 엽니다. 이제 커밋 메시지의 텍스트를 최종적으로 업데이트하는 시간입니다!

    • 한 줄짜리 커밋 메시지만 필요한 경우 필요에 맞게 텍스트를 업데이트합니다. 예를 들어:

      월간 마일스톤 계획 업데이트
      
    • 커밋 메시지가 제목과 본문을 필요로 하는 경우 빈 줄로 이 둘을 구분합니다. 예를 들어:

      월간 마일스톤 계획 업데이트
           
      각 유지 관리자의 책임을 나열하여 마일스톤 계획을 더 명확하게 만듭니다.
      

    저장 및 종료한 후 Git은 커밋 메시지를 업데이트하고 순서대로 다른 커밋을 처리합니다. 종료하면 Successfully rebased and updated refs/heads/my-branch-name 메시지가 표시됩니다.

  7. 선택 사항. 커밋 메시지가 업데이트되었는지를 확인하려면 git log를 실행하여 커밋 메시지를 스크롤하여 확인할 수 있습니다.

GitLab에 변경 사항 푸시하기

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

  1. CLI에서 변경 사항을 GitLab로 다시 푸시합니다. “강제 푸시” 옵션인 -f를 사용해야 합니다. 이는 커밋이 업데이트되었고 강제 푸시가 GitLab의 이전 커밋을 덮어쓰기 때문입니다.

    git push -f origin
    

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

  2. GitLab의 프로젝트에서 커밋이 업데이트되었는지 확인하세요:

    • 이미 브랜치에 대한 Merge Request이 열려 있다면, 커밋 탭을 확인하세요.
    • 브랜치에서 작업 중이라면:
      1. 코드 > 커밋으로 이동합니다.
      2. 좌측 상단의 드롭다운 디렉터리을 선택하고 브랜치를 찾습니다.
      3. 디렉터리에서 관련된 커밋이 이제 업데이트되었는지 확인하세요.

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