튜토리얼: Git 커밋 메시지 업데이트
가끔은 브랜치에 몇 가지 커밋을 한 후에 하나 이상의 커밋 메시지를 업데이트해야 할 때가 있습니다. 어쩌면 오타를 발견했거나 자동화된 경고로 인해 커밋 메시지가 프로젝트의 커밋 메시지 가이드라인과 완전히 일치하지 않았을 수도 있습니다.
메시지를 업데이트하는 것은 명령줄 인터페이스(CLI)를 사용한 경험이 많지 않다면 까다로울 수 있습니다. 하지만 걱정하지 마세요. GitLab UI에서만 작업한 경험이 있다면 이 지침을 따라갈 수 있습니다.
이 튜토리얼에서는 두 가지 경우에 대해 커밋 메시지를 다시 작성하는 방법을 설명합니다.
- GitLab UI에서만 작업하는 경우 1단계부터 시작합니다.
- 이미 로컬로 리포지토리를 복제한 경우 2단계로 건너뛸 수 있습니다.
임의의 수의 커밋 메시지를 다시 작성하려면:
- 프로젝트 리포지토리를 로컬 머신에 복제합니다.
- 로컬로 가져오고 브랜치를 확인합니다.
- 커밋 메시지를 업데이트합니다.
- 변경 사항을 GitLab에 푸시합니다.
시작하기 전에
다음이 있어야 합니다:
- 업데이트하려는 커밋이 포함된 Git 브랜치가 있는 GitLab 프로젝트.
- 로컬 머신에 Git이 설치되어 있어야 합니다.
- 로컬 머신의 명령줄 인터페이스(CLI)에 액세스할 수 있어야 합니다. macOS의 경우 Terminal을 사용할 수 있습니다. Windows의 경우 PowerShell을 사용할 수 있습니다. Linux 사용자는 이미 시스템의 CLI에 익숙할 것입니다.
- 시스템의 기본 편집기에 익숙해야 합니다. 이 튜토리얼은 기본적으로 Vim 편집기를 사용한다고 가정하지만 다른 텍스트 편집기도 작동해야 합니다. Vim이 익숙하지 않은 경우 Vim 시작하기의 1에서 2단계에서 이 튜토리얼에서 나중에 사용할 모든 명령에 대해 설명합니다.
- 커밋 메시지를 덮어쓸 권한이 있어야 합니다. 동일한 브랜치에서 여러 사람과 함께 작업하는 경우 커밋을 업데이트해도 괜찮은지 먼저 확인해야 합니다. 일부 조직에서는 커밋을 다시 작성하는 것을 파괴적인 변경으로 보기 때문에 규칙이 있을 수 있습니다.
마지막 단계에서 커밋 메시지를 덮어쓰려면 GitLab에 인증해야 합니다. GitLab 계정이 기본 사용자 이름과 암호 인증을 사용하는 경우, CLI에서 인증하려면 2단계 인증(2FA)을 해제해야 합니다. 그렇지 않으면 SSH 키를 사용하여 GitLab에 인증할 수 있습니다.
프로젝트 리포지토리를 로컬 머신에 복제
첫 번째 단계는 로컬 머신에 리포지토리를 복제하는 것입니다.
- GitLab의 프로젝트 개요 페이지에서 오른쪽 위 모서리에 있는 Code를 선택합니다.
- 드롭다운 목록에서 다음과 같이 복제할 리포지토리의 URL을 복사합니다:
- GitLab 계정이 기본 사용자 이름과 암호 인증을 사용하는 경우 Clone with HTTPS 옆의 을 선택합니다.
- GitLab에 SSH를 사용하는 경우 Clone with SSH를 선택합니다.
- 이제 로컬 머신의 CLI(Terminal, PowerShell 또는 유사한)로 이동하여 리포지토리를 복제할 디렉토리로 이동합니다. 예를 들어
/users/my-username/my-projects/
. -
git clone
을 실행하고 이전에 복사한 URL을 붙여넣습니다. 예:git clone https://gitlab.com/my-username/my-awesome-project.git
이 명령은
my-awesome-project/
라는 새 디렉토리에 리포지토리를 복제합니다.
이제 리포지토리가 컴퓨터에 있어서 Git CLI 명령을 사용할 준비가 되었습니다!
로컬로 가져오고 브랜치를 확인
다음으로 업데이트할 커밋이 포함된 브랜치로 전환해야 합니다.
-
이전 단계의 CLI와 동일한 위치에 있다고 가정하고,
cd
를 사용하여 프로젝트 디렉토리로 이동합니다:cd my-awesome-project
-
선택 사항. 리포지토리를 방금 복제한 경우 브랜치는 이미 컴퓨터에 있어야 합니다. 그러나 이전에 리포지토리를 복제하고 이 단계로 건너뛴 경우
git fetch origin my-branch-name
으로 브랜치를 가져와야 할 수도 있습니다. -
이제 브랜치가 로컬 시스템에 있는지 확실해졌으므로 해당 브랜치로 전환합니다:
git checkout my-branch-name
-
git log
를 사용하여 올바른 브랜치인지 확인하고 GitLab의 브랜치에 있는 커밋과 일치하는지 확인합니다. 로그를 나가려면q
를 사용합니다.
커밋 메시지 업데이트
이제 커밋 메시지를 업데이트할 준비가 되었습니다.
-
GitLab에서 커밋 히스토리에서 얼마나 이전으로 돌아가야 하는지 확인합니다.
- 이미 브랜치에 대한 병합 요청이 열려 있는 경우 Commits 탭을 확인하고 전체 커밋 수를 사용할 수 있습니다.
- 브랜치에서 작업 중인 경우:
- Code > Commits로 이동합니다.
- 왼쪽 상단의 드롭다운 목록을 선택하고 브랜치를 찾습니다.
- 업데이트하려는 가장 이전의 커밋을 찾아 몇 번째 이전인지 계산합니다. 예를 들어, 두 번째와 네 번째 커밋을 업데이트하려면 카운트는 4가 됩니다.
-
CLI에서 커밋을 업데이트하는 Git 프로세스인 대화형 리베이스를 시작합니다. 이전 단계에서 계산한 커밋 수를
HEAD~
뒤에 추가합니다. 예를 들어:git rebase -i HEAD~4
이 예에서 Git은 브랜치에서 최근 네 개의 커밋을 선택합니다.
-
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 # [그 밖에...]
-
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
-
편집한 텍스트를 저장합니다.
INSERT
모드를 종료하려면 Escape를 누르고,:wq
를 입력한 후 Enter를 눌러 저장하고 종료합니다. -
Git은 이제 각 커밋을 하나씩 거칩니다.
pick
으로 표시된 커밋은 변경되지 않은 채로 다시 브랜치에 추가됩니다. Git이reword
가 있는 커밋에 도달하면 텍스트 편집기를 다시 열고 커밋 메시지의 텍스트를 업데이트해야 합니다!-
한 줄짜리 커밋 메시지만 필요한 경우 필요한 대로 텍스트를 업데이트합니다. 예를 들어:
월간 마일스톤 계획 업데이트
-
커밋 메시지에 제목과 본문이 필요한 경우 이를 빈 줄로 구분합니다. 예를 들어:
월간 마일스톤 계획 업데이트 각 유지보수자의 책임을 나열하여 마일스톤 계획을 명료하게 만듭니다.
저장하고 종료한 후, Git은 커밋 메시지를 업데이트하고 순서대로 다른 커밋을 처리합니다. 완료되면
Successfully rebased and update refs/heads/my-branch-name
메시지가 표시됩니다. -
-
선택 사항. 커밋 메시지가 업데이트되었는지 확인하려면
git log
를 실행하여 커밋 메시지를 확인할 수 있습니다.
변경 사항을 GitLab에 푸시하기
이제 변경 사항을 GitLab에 푸시하면 됩니다.
-
CLI에서 변경 사항을 GitLab에 되돌리기 위해
-f
“포스 푸시” 옵션을 사용하여 변경 사항을 푸시합니다. 커밋이 업데이트되었으므로 이전 커밋을 덮어쓰기 위해 “포스 푸시” 옵션을 사용해야 합니다.git push -f origin
커밋 메시지를 GitLab에서 덮어쓰기 전에 터미널에서 사용자 이름과 암호를 입력해야 할 수 있습니다.
-
GitLab 프로젝트에서 커밋이 업데이트되었는지 확인합니다.
- 이미 브랜치에 대한 병합 요청이 열려 있는 경우 Commits 탭을 확인합니다.
- 브랜치에서 작업 중이라면:
- Code > Commits로 이동합니다.
- 왼쪽 상단의 드롭다운 목록을 선택하고 브랜치를 찾습니다.
- 목록에서 관련된 커밋이 업데이트되었는지 확인합니다.
축하합니다. 이제 커밋 메시지를 성공적으로 업데이트하고 GitLab에 푸시했습니다!