튜토리얼: Git 커밋 메시지 업데이트
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
브랜치에 몇 가지 커밋을 만든 후에 하나 이상의 커밋 메시지를 업데이트해야 한다는 것을 깨닫는 경우가 있습니다. 커맨드라인 인터페이스(CLI)에서 Git을 사용하는 경험이 많지 않다면 메시지를 업데이트하는 것이 어려울 수 있습니다.
브랜치에 몇 가지 커밋을 만든 후에 하나 이상의 커밋 메시지를 업데이트해야 한다는 것을 깨닫는 경우가 있습니다. 오타를 발견하거나, 자동화가 커밋 메시지가 프로젝트의 커밋 메시지 가이드라인과 완전히 일치하지 않는다고 경고했을 수 있습니다.
커맨드라인 인터페이스(CLI)에서 Git을 사용하는 경험이 많지 않다면 메시지를 업데이트하는 것이 어려울 수 있습니다. 하지만 걱정하지 마세요. GitLab UI에서만 작업해 본 적이 있더라도 이 단계를 따라 CLI를 사용할 수 있습니다.
이 튜토리얼은 커밋 메시지를 재작성하는 방법을 설명합니다. GitLab UI에서만 작업하는 경우 처음부터 시작하세요. 이미 리포지터리를 로컬에 클론한 경우 브랜치를 가져오고 체크아웃하는 단계로 건너뛸 수 있습니다.
시작하기 전에#
다음이 필요합니다:
- 업데이트하려는 커밋이 포함된 Git 브랜치가 있는 GitLab 프로젝트.
- 로컬 머신에 설치된 Git.
- 로컬 머신의 커맨드라인 인터페이스(CLI) 접근 권한. macOS에서는 터미널을 사용할 수 있습니다. Windows에서는 PowerShell을 사용할 수 있습니다. Linux 사용자는 아마도 이미 시스템 CLI에 익숙할 것입니다.
- 시스템 기본 편집기에 대한 익숙함. 이 튜토리얼은 편집기가 Vim이라고 가정하지만 어떤 텍스트 편집기든 작동합니다. Vim에 익숙하지 않은 경우 Vim 시작하기의 1-2단계에서 이 튜토리얼의 뒷부분에서 사용하는 모든 명령을 설명합니다.
- 커밋 메시지를 덮어쓸 수 있는 권한. 동일한 브랜치에서 여러 사람과 함께 작업하는 경우 커밋 업데이트가 괜찮은지 먼저 확인해야 합니다. 일부 조직은 커밋 재작성을 파괴적 변경으로 간주하여 금지하는 규칙이 있을 수 있습니다.
최종 단계에서 GitLab의 커밋 메시지를 덮어쓰려면 GitLab으로 인증해야 합니다. GitLab 계정이 기본 사용자 이름 및 암호 인증을 사용하는 경우 CLI에서 인증하려면 이중 인증(2FA)을 비활성화해야 합니다. 또는 SSH 키를 사용하여 GitLab으로 인증할 수 있습니다.
로컬 머신에 리포지터리 클론#
시작하려면 머신에 리포지터리의 로컬 복사본을 만듭니다.
-
리포지터리 URL을 복사합니다.
GitLab의 프로젝트 개요 페이지에서 오른쪽 상단에 있는 코드를 선택합니다. 드롭다운 목록에서 다음 항목 옆의 [copy-to-clipboard]를 선택하여 리포지터리 URL을 복사합니다:
- GitLab 계정이 기본 사용자 이름 및 암호 인증을 사용하는 경우 HTTPS로 클론.
- GitLab 인증에 SSH를 사용하는 경우 SSH로 클론.
-
리포지터리를 클론합니다.
로컬 머신의 CLI(터미널, 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 명령을 사용할 준비가 되었습니다.
브랜치 가져오기 및 체크아웃#
다음으로 업데이트하려는 커밋이 포함된 브랜치로 전환합니다.
-
프로젝트 디렉토리로 변경합니다.
이전 단계와 동일한 위치에 있다고 가정하고
cd를 사용하여 프로젝트 디렉토리로 변경합니다:cd my-awesome-project -
필요하면 브랜치를 가져옵니다.
리포지터리를 방금 클론한 경우 브랜치가 이미 컴퓨터에 있어야 합니다. 그러나 이전에 리포지터리를 클론하고 이 단계로 건너뛴 경우 브랜치를 가져와야 할 수 있습니다:
git fetch origin my-branch-name -
브랜치를 체크아웃합니다.
이제 브랜치가 로컬 시스템에 있으므로 전환합니다:
git checkout my-branch-name -
올바른 브랜치에 있는지 확인합니다.
git log를 실행하고 최근 커밋이 GitLab의 브랜치 커밋과 일치하는지 확인합니다. 로그를 종료하려면q를 사용합니다.
커밋 메시지 업데이트#
이제 대화형 리베이스를 사용하여 커밋 메시지를 재작성할 준비가 되었습니다.
-
업데이트할 커밋 수를 결정합니다.
GitLab에서 커밋 히스토리에서 얼마나 뒤로 가야 하는지 확인합니다:
- 브랜치에 대한 머지 리퀘스트가 이미 열려 있다면 Commits 탭에서 전체 커밋 수를 사용할 수 있습니다.
- 브랜치에서만 작업하는 경우:
- 코드 > 커밋으로 이동합니다.
- 왼쪽 상단의 드롭다운 목록을 선택하고 브랜치를 찾습니다.
- 업데이트하려는 가장 오래된 커밋을 찾고 그 커밋이 얼마나 뒤에 있는지 세어봅니다. 예를 들어 두 번째와 네 번째 커밋을 업데이트하려면 개수는 4입니다.
-
대화형 리베이스를 시작합니다.
CLI에서 이전 단계의 커밋 수를
HEAD~끝에 추가하여 리베이스 프로세스를 시작합니다:git rebase -i HEAD~4이 예에서 Git은 브랜치의 가장 최근 커밋 4개를 업데이트 대상으로 선택합니다.
-
재작성할 커밋을 표시합니다.
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...]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 -
변경 사항을 저장합니다.
Escape를 눌러
INSERT모드를 종료하고:wq를 입력한 다음 Enter를 눌러 저장하고 종료합니다. -
각 커밋 메시지를 업데이트합니다.
이제 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메시지가 표시됩니다. -
업데이트를 확인합니다.
커밋 메시지가 업데이트되었는지 확인하려면
git log를 실행하고 스크롤하여 커밋 메시지를 확인합니다.
GitLab에 변경 사항 푸시#
마지막으로 업데이트된 커밋을 GitLab에 다시 푸시합니다.
-
변경 사항을 강제 푸시합니다.
CLI에서 변경 사항을 GitLab으로 다시 푸시합니다. 커밋이 업데이트되었고 강제 푸시는 GitLab의 이전 커밋을 덮어쓰므로
-f"강제 푸시" 옵션을 사용해야 합니다:git push -f originGitLab에서 커밋 메시지를 덮어쓰기 전에 터미널이 사용자 이름과 암호를 묻는 메시지를 표시할 수 있습니다.
-
GitLab에서 변경 사항을 확인합니다.
GitLab의 프로젝트에서 커밋이 업데이트되었는지 확인합니다:
- 브랜치에 대한 머지 리퀘스트가 이미 열려 있다면 Commits 탭을 확인합니다.
- 브랜치에서만 작업하는 경우:
- 코드 > 커밋으로 이동합니다.
- 왼쪽 상단의 드롭다운 목록을 선택하고 브랜치를 찾습니다.
- 목록의 관련 커밋이 이제 업데이트되었는지 확인합니다.
축하합니다. 커밋 메시지를 성공적으로 업데이트하고 GitLab에 푸시했습니다!
