Git 병합 후 갇히는 '커밋 메시지' 화면의 정체
Git에서 일반 병합(merge)을 수행한 직후, "Please enter a commit message to explain why this merge is necessary(이 병합이 왜 필요한지 설명하는 커밋 메시지를 입력해 주세요)"라는 문구와 함께 화면이 멈춰 버린 경험이 있으신가요? 아무리 입력해도 빠져나올 수 없어 당황스럽지만, 사실 이것은 오류 메시지가 전혀 아닙니다.
이 화면은 커밋 메시지를 작성하기 위해 열린 텍스트 편집기일 뿐입니다. 여기에 입력한 내용은 병합 작업을 검토할 다른 개발자들에게 남기는 메모 역할을 하며, 평소 터미널에서 편집기를 종료하듯이 빠져나오면 됩니다.
커밋 메시지를 요구하는 Git 병합 화면 종료하기
이런 상황은 주로 업스트림(upstream) 저장소의 최신 변경 사항을 자신의 토픽 브랜치(topic branch)로 병합할 때 나타납니다. Git 공식 문서 어디에도 이 화면에서 빠져나오는 방법이 설명되어 있지 않은데, 애초에 이것이 '프롬프트'가 아니기 때문입니다.
메시지의 각 줄이 # 기호로 시작한다는 점에 주목하세요. #으로 시작하는 줄은 모두 주석(comment)입니다. Git은 프로젝트에 참여하는 개발자 수를 알 수 없기 때문에, 업스트림을 토픽 브랜치로 병합한 이유를 다른 사람에게 알릴 기회를 제공하는 것입니다. 핵심은 현재 어떤 편집기가 열려 있는지에 따라 종료 방법이 달라진다는 점입니다.
vi 또는 vim 편집기인 경우
대부분의 경우 Git은 vi 또는 vim 편집기를 실행합니다. Esc 키를 누른 후 :wq를 입력하고 Enter를 누르면 됩니다. 이는 평소 vim을 종료하는 방식과 동일하며, 파일을 저장한 뒤 편집기가 닫히면서 Git 작업도 마무리됩니다.
어떤 편집기가 열려 있는지 파악하려면 화면의 단서를 살펴보세요. 좌측에 물결표(~) 문자가 여러 개 표시되어 있다면 아직 입력되지 않은 빈 줄을 나타내는 vim의 특징입니다. 편집기를 알 수 없더라도 일단 Esc 후 :wq를 시도해 보세요. vi와 vim은 사실상 표준처럼 쓰이고 있어 대부분의 경우 이 방법으로 빠져나올 수 있습니다.
nano 편집기인 경우
nano를 사용 중이라면 Ctrl+X를 누르고, 변경 사항을 저장할지 묻는 질문에 y를 입력한 뒤 Enter를 누르면 곧바로 Git을 벗어날 수 있습니다. 화면 상단에 "GNU nano"라는 문구가 있다면 nano가 맞고, 그렇지 않더라도 창 하단에 키보드 단축키 목록이 나열되어 있다면 nano일 가능성이 높습니다.
emacs 또는 기타 편집기인 경우
위 방법이 모두 통하지 않는다면 Ctrl+X를 누른 후 Ctrl+C를 눌러 보세요. emacs 편집기를 사용 중일 때 효과적인 방법입니다. 다만 이런 경우는 드물며, 대부분은 Esc + :wq 또는 Ctrl+X + y로 해결됩니다. JOE 편집기를 사용 중이라면 Ctrl+C만으로도 저장 없이 종료할 수 있습니다.
기본 편집기 확인 및 변경하기
무사히 빠져나왔다면 터미널에 다음 명령어를 입력해 어떤 편집기에 갇혔는지 정확히 확인할 수 있습니다.
cat ~/.gitconfig | grep editor
"editor = vim"과 같은 결과가 출력되며, 이것이 Git이 기본으로 사용하는 편집기입니다. 앞으로 일반 병합 후 같은 화면을 다시 만나더라도 해당 편집기의 표준 종료 방법을 사용하면 됩니다.
또한 기본 편집기를 원하는 것으로 변경할 수도 있습니다. ~/.gitconfig 파일을 선호하는 편집기로 연 뒤 [core] 섹션을 찾고, "editor = vim" 부분을 원하는 편집기 이름으로 수정하세요. 예를 들어 nano를 선호한다면 "editor = nano"로 바꾸면 됩니다.
마무리
Git 병합 후 나타나는 '커밋 메시지 입력' 화면은 오류가 아니라 메시지를 작성하기 위한 편집기입니다. Esc 후 :wq(vim), Ctrl+X 후 y(nano), Ctrl+X 후 Ctrl+C(emacs)처럼 편집기별 종료 방법만 기억해 두면 더 이상 당황할 일이 없습니다.
저자 소개
Kevin Arrows는 10년 이상의 업계 경력을 지닌 기술 전문가로, Microsoft Certified Technology Specialist(MCTS) 자격증을 보유하고 있습니다. 소프트웨어 개발, 사이버 보안, 클라우드 컴퓨팅 등 다양한 분야에서 폭넓게 집필해 왔으며, 복잡한 기술 개념을 명확하고 간결하게 설명하는 능력으로 동료들의 인정을 받고 있습니다.