Git 저장소에 변경 사항을 저장하는 일은 단순히 파일을 저장하는 것만큼 간단하지 않습니다. Git 버전 관리 시스템은 더 정교한 방식으로 변경 사항을 추적하기 때문에, 개발자는 저장소의 코드에 가한 변경 내역을 훨씬 세밀하게 제어할 수 있습니다.
git commit 명령어는 프로젝트의 변경 사항을 저장소에 '저장'하는 과정의 한 단계입니다. 먼저 git add 명령어로 커밋에 포함될 변경 사항의 기록을 만들고, 그다음 git commit으로 해당 변경 사항이 담긴 커밋을 생성합니다. 마지막으로 git push를 사용해 커밋을 중앙 저장소로 전송합니다.
이 튜토리얼에서는 예제와 함께 git commit 명령어로 커밋을 생성하는 방법을 살펴보겠습니다. 글을 다 읽고 나면 여러분도 git commit을 능숙하게 활용할 수 있게 될 것입니다.
Git 커밋이란?
커밋은 Git 버전 관리 시스템에서 빼놓을 수 없는 핵심 요소입니다.
커밋은 '프로젝트 역사상 특정 시점의 스냅샷'이라고 생각하면 이해하기 쉽습니다. 커밋이 생성되면 그 시점에 프로젝트의 모든 파일과 디렉터리가 어떤 상태였는지에 대한 기록이 만들어집니다.
이 기록은 나중에 다시 조회할 수 있어서, 특정 시점의 프로젝트 모습이나 누가 어떤 파일에 어떤 변경을 했는지 손쉽게 파악할 수 있습니다. 실제로 커밋은 저장소가 시간의 흐름에 따라 어떻게 발전해 왔는지에 대한 포괄적인 이력을 남겨 주기 때문에 Git의 가장 중요한 기능 중 하나로 꼽힙니다.
다른 버전 관리 시스템과 달리, 커밋은 개발자가 준비될 때까지 중앙 저장소에 아무런 영향을 주지 않습니다. 즉, 커밋은 로컬에서 가한 변경과 메인 버전 사이의 완충 지대 역할을 합니다.
다시 말해, 수많은 기여자가 함께 작업하는 메인 저장소에 곧바로 변경을 반영하는 대신, 개발자는 자신의 로컬 저장소에 코드를 커밋해 두었다가 나중에 메인 저장소로 푸시할 수 있습니다.
커밋 생성은 Git에서 변경 사항을 '저장'하는 단계 중 마지막에서 두 번째 단계입니다. 커밋을 만든 후에는 git push를 사용해 변경 사항을 중앙 저장소로 밀어 넣습니다.
git commit 사용법
git commit 명령어는 스테이징된(staged) 모든 변경 사항을 로컬 저장소에 저장합니다.
'스테이징된 변경 사항'이란 git add 명령어로 스테이징 영역에 올린 파일들을 의미합니다. git add 명령어에 대해 더 알고 싶다면 초보자용 가이드를 참고해 보세요.
그럼 git commit 명령어의 사용법을 하나씩 살펴보겠습니다.
1. git commit
git commit 명령어의 가장 기본적인 사용법은 다음과 같습니다:
git commit
이 명령어는 스테이징된 변경 사항을 로컬 저장소에 커밋합니다. 명령어를 실행하면 텍스트 편집기가 열리고 커밋 메시지를 입력하라는 안내가 표시됩니다.
커밋 메시지에는 해당 커밋에서 저장소에 가한 변경 사항을 간략하게 설명하면 됩니다. 메시지를 작성한 뒤 편집기를 닫으면 커밋이 생성됩니다.
2. git commit -a
-a 플래그(all)를 사용하면 수정된 모든 파일을 자동으로 스테이징하여 커밋할 수 있습니다.
예를 들어 CONTRIBUTORS.md 파일을 이미 커밋한 상태에서 이 파일을 수정했다면, git commit -a 명령어 하나로 변경 사항을 스테이징하고 저장소에 반영할 수 있습니다.
-a 플래그를 사용하면 변경된 파일마다 일일이 'git add'를 실행할 필요가 없습니다. -a 플래그는 수정된 모든 파일을 스테이징하라고 Git에 지시하기 때문입니다. 다만 주의할 점은, -a 플래그는 새로 생성된 파일은 스테이징하지 않는다는 것입니다. 따라서 'README.md'처럼 새로 만든 파일이 있다면 반드시 'git add'를 먼저 실행해야 합니다.
-a 플래그의 문법은 다음과 같습니다:
git commit -a
이 명령어는 수정된 모든 파일을 자동으로 스테이징하여 커밋합니다.
3. git commit -m
git commit과 함께 가장 널리 쓰이는 플래그는 아마 -m일 것입니다. -m(message) 플래그는 커밋 메시지를 직접 지정할 때 사용합니다.
-m 플래그 없이 git commit을 실행하면 앞서 설명한 것처럼 텍스트 편집기가 열리고, 그 안에서 메시지를 작성해야 합니다. 반면 -m 플래그를 사용하면 편집기를 열 필요 없이 커밋 메시지를 바로 지정할 수 있습니다.
-m 플래그를 사용한 문법은 다음과 같습니다:
git commit -m "feat: 커밋 메시지"
이 명령어에서는 -m 플래그를 지정해 커밋 메시지를 직접 추가한다는 의미를 전달합니다(편집기를 열어 입력하는 대신). 그런 다음 -m 플래그 뒤에 큰따옴표로 감싼 커밋 메시지를 작성합니다. 위 예제에서 커밋 메시지는 "feat: 커밋 메시지"입니다.
Git 커밋 실전 예제
구체적인 예제를 통해 git commit 명령어의 활용 과정을 살펴보겠습니다.
프로젝트를 진행하던 중 app.py 파일을 방금 수정했다고 가정해 보겠습니다. 원하는 변경을 모두 마쳤고, 이제 이 파일에 대한 커밋을 생성할 준비가 되었습니다.
첫 번째 단계는 git add로 파일을 스테이징 영역에 추가하는 것입니다. 다음 코드로 실행할 수 있습니다:
git add app.py
이제 app.py 파일이 스테이징 영역에 들어갔습니다. 준비가 되면 언제든지 커밋할 수 있는 상태입니다.
app.py 파일에 'runApp()'이라는 새 함수를 추가했고, 이를 로컬 저장소에 커밋하려고 합니다. 다음 코드로 실행할 수 있습니다:
git commit -m "feat: Add runApp() function"
이 명령어는 app.py 파일에 대한 변경 사항이 담긴 커밋을 생성합니다. 커밋에 연결된 메시지는 "feat: Add runApp() function"으로, 저장소에 가한 변경 사항을 간결하게 설명합니다.
Git 커밋 수정하기(--amend)
git commit 명령어는 직전 커밋을 수정(amend)하는 기능도 제공합니다. --amend 옵션을 사용하면 됩니다.
방금 커밋을 만들었는데 __init__.py 파일을 포함하는 것을 깜빡했다고 가정해 보겠습니다. 다음 코드로 초기 커밋을 수정해 파일을 포함시킬 수 있습니다:
git add __init__.py
git commit --amend -m "feat: Add runApp() function and update init file"
이렇게 하면 이전 커밋이 __init__.py 파일을 포함하도록 수정되고, 커밋 메시지도 위 명령어에서 지정한 새 메시지로 교체됩니다.
--amend 플래그는 개발자들이 자주 사용합니다. 버전 관리 작업 중에는 실수가 생기기 쉽기 때문입니다. 예를 들어 파일 스테이징을 잊었거나, 커밋 메시지에 오타를 냈거나, 메시지가 주요 변경 사항을 반영하지 못하는 경우가 그렇습니다.
따라서 소프트웨어를 개발하는 동안 --amend 플래그를 자주 활용하게 될 가능성이 높습니다.
좋은 커밋 메시지 작성법
앞서 언급했듯이 git commit을 사용할 때는 커밋 메시지 작성이 필수입니다. 엄밀히 말하면 메시지에 무엇을 적든 강제는 아니지만, 어떤 내용을 담을지 어느 정도 고민하는 것이 좋습니다.
좋은 커밋 메시지를 작성하는 정해진 규칙은 없지만, 개발자들이 일관성 있고 설명이 충실한 메시지를 쓰기 위해 흔히 지키는 베스트 프랙티스가 몇 가지 있습니다.
Git 커밋 메시지를 작성할 때 유의할 사항은 다음과 같습니다:
- 커밋 메시지의 제목(첫 줄)은 대문자로 시작하기
- 제목은 50자 이내로 제한하기
- 커밋 본문에는 '무엇을' 변경했는지 설명하기('왜'보다는)
- 본문의 각 줄은 72자 미만으로 유지하기
이 규칙들을 지키면 더 읽기 쉽고 해석하기 편한 커밋 메시지를 작성할 수 있습니다.
또한 커밋 메시지에서 다른 이슈나 풀 리퀘스트를 참조하는 것도 좋은 습관입니다. 예를 들어 커밋이 저장소의 #22번 이슈를 해결했다면 커밋 제목을 "fix: resolves issue #22"로 작성하고, 본문에 해당 이슈를 해결하기 위해 어떤 변경을 했는지 설명을 덧붙일 수 있습니다.
결론
git commit 명령어는 스테이징 영역의 파일들을 커밋으로 옮기는 데 사용됩니다. 이 명령어는 파일을 스테이징 영역에 추가하는 git add 이후에 실행되며, Git 저장소의 변경 사항에 대한 스냅샷을 생성합니다. 이렇게 만든 커밋은 개발자가 준비되었을 때 메인 저장소로 푸시할 수 있습니다.
이 튜토리얼에서는 git commit 명령어로 Git 저장소에 변경 사항을 커밋하는 방법을 알아보았습니다. 이제 git commit 명령어를 전문가처럼 활용할 준비가 되셨기를 바랍니다!