Git 여러개의 커밋을 하나로 합치는 방법
Git 여러개의 커밋을 하나로 합치는 방법
Git 여러개의 커밋을 하나로 합치는 방법
Git을 사용하다 보면 여러 번의 커밋을 하나로 합쳐야 할 상황이 생길 수 있습니다. 예를 들어, 하나의 기능이나 버그 수정을 작업하는 동안 여러 번의 작은 커밋을 만들었다면, 작업이 완료된 후에 해당 커밋들을 하나로 합쳐 보다 깔끔한 히스토리를 유지하고 싶을 수 있습니다.
이를 Git에서는 “squash”라고 부르며, 이 글에서는 여러 개의 커밋을 하나로 합치는 방법을 단계별로 설명하겠습니다.
1. Git 로그 확인하기
우선, 현재 브랜치의 커밋 로그를 확인하여 어떤 커밋들을 합칠지 결정해야 합니다. 다음 명령어를 사용해 최근의 커밋들을 확인할 수 있습니다:
git log --oneline
이 명령어는 커밋 해시와 메시지를 간단하게 보여줍니다. 예를 들어, 다음과 같은 로그가 있다고 가정해봅시다:
a1b2c3d Fix typo in documentation
d4e5f6g Add more tests for feature X
h7i8j9k Implement feature X
이제 이 세 개의 커밋을 하나로 합쳐 보겠습니다.
2. rebase
명령어를 사용하여 커밋 합치기
Git에서 여러 개의 커밋을 하나로 합치는 가장 일반적인 방법은 git rebase
명령어를 사용하는 것입니다.
먼저, 몇 개의 커밋을 합칠 것인지 결정한 후에 해당 커밋 수 만큼의 히스토리를 rebase
할 수 있습니다. 여기서는 최근 3개의 커밋을 하나로 합쳐보겠습니다.
git rebase -i HEAD~3
이 명령어는 현재 브랜치의 가장 최신 커밋에서부터 3개의 커밋을 대상으로 인터랙티브 리베이스를 시작합니다. 이 명령어를 실행하면, 다음과 같은 텍스트 편집 창이 열립니다.
pick h7i8j9k Implement feature X
pick d4e5f6g Add more tests for feature X
pick a1b2c3d Fix typo in documentation
3. Squash 옵션 설정하기
편집기에서 pick
이라는 단어를 “squash”로 변경해 줍니다. “squash”는 이전 커밋과 현재 커밋을 합친다는 의미입니다. 다음과 같이 변경합니다:
pick h7i8j9k Implement feature X
squash d4e5f6g Add more tests for feature X
squash a1b2c3d Fix typo in documentation
이렇게 설정한 후, 파일을 저장하고 편집기를 닫습니다. 그러면 Git은 선택된 커밋들을 하나로 합쳐 줍니다.
4. 커밋 메시지 수정하기
커밋을 합친 후에는 새로운 커밋 메시지를 작성하는 단계가 나옵니다. 커밋 메시지를 기존 메시지를 바탕으로 수정하거나 새로운 메시지를 작성할 수 있습니다. 예를 들어:
Implement feature X with additional tests and documentation fixes
원하는 메시지로 수정한 후 저장하고 종료하면, Git이 커밋들을 하나로 합칩니다.
5. 리베이스 완료 및 푸시하기
리베이스가 끝나면 로컬 브랜치에서는 커밋이 하나로 합쳐져 있을 것입니다. 이제 이 변경 사항을 원격 저장소에 반영해야 합니다. 단, 이미 원격 저장소에 여러 개의 커밋을 푸시한 적이 있다면 --force
옵션을 사용하여 강제로 푸시해야 합니다.
git push --force
이 명령어는 원격 저장소의 히스토리를 덮어쓰므로, 팀원들과 협업 중이라면 주의해야 합니다.
마무리
이 글에서는 Git에서 여러 개의 커밋을 하나로 합치는 방법을 소개했습니다. rebase -i
명령어를 사용하면 원하는 커밋들을 쉽게 하나로 합칠 수 있으며, 더 깔끔하고 의미 있는 Git 히스토리를 유지할 수 있습니다. 팀원들과 협업할 때는 항상 히스토리를 변경하는 작업을 신중하게 다뤄야 하며, 특히 --force
푸시는 꼭 필요한 경우에만 사용해야 합니다.