반응형

개발을 하다 보면 이미 작성한 커밋 메시지를 바꿔야 할 때가 있다. 가장 최근 메시지를 수정할 것인지, 과거 여러 이력을 포함하여 복수 커밋을 수정, 삭제 등 수정할 것인지 경우에 따라 커밋 메시지를 수정하는 법에 대해 알아보자.

가장 최근 커밋 수정, 과거 커밋 수정 2가지 경우에 대해 알아보자.

 

🧩 가장 최근 커밋 메시지 수정하기 (amend)

# 최근 커밋 수정하기 (커밋 메시지, 내용 변경)
git commit --amend

# 이미 원격 저장소에 푸시한 커밋을 강제로 업데이트하기
git push --force

# 수정할 커밋을 삭제하고 이전 상태로 완전히 되돌아가기
git reset --hard HEAD~1

# 원격 저장소 최신 상태 가져오기 (리셋 후 동기화)
git pull

가장 최근(commit HEAD) 하나의 커밋만 수정할 때 사용한다. 메시지뿐만 아니라 스테이징 된 파일 추가/삭제 모두 가능하다.
보통 방금 커밋한 내용을 바로 수정하거나 보완할 때 쉽고 간단하게 메시지를 수정할 수 있다.

이미 원격 저장소에 푸시한 경우, 수정한 커밋 메시지를 원격 저장소에 반영하려면 강제로 푸시해야 한다.
⚠️ 강제 푸시는 공동 작업자와의 충돌 위험이 있어서 반드시 협의 후 진행해야 한다.

커밋 메시지 수정 후 되돌리고 싶다면,
가장 최근 커밋 메시지를 바꾼 후, 원래 상태로 돌아가고 싶을 때 git reset을 실행한 후 원격저장소의 최신 상태 동기화를 실행(pull)한다.

HEAD~1은 바로 이전 커밋을 가리키며, --hard 옵션은 커밋 + 스테이징 영역 + 작업 디렉토리까지 모든 변경사항을 제거한다. 즉, 파일의 변경사항이 함께 삭제되는 것이다.
--soft 옵션은 커밋만 되돌리는 것으로 스테이징 영역, 작업 디렉토리는 유지된다. 커밋 내역을 확실하게 제거해야 하는 경우가 아니라면 soft 옵션을 사용하는 것을 권장한다.

 

🧩 과거 여러 커밋 메시지 수정하기 (rebase)

# 최근 커밋 대상으로 리베이스 작업 시작 (수정하고자 하는 커밋 수에 맞게 숫자를 조절)
# HEAD(최신 커밋) 기준으로 이전 2개 커밋까지 포함하여 인터렉티브 리베이스 시작
git rebase -i HEAD~2

# 초기 커밋(최초로 작성)을 포함하여 리베이스 작업 시작
git rebase -i --root

# 리베이스 중단 (취소)
git rebase --abort

# 리베이스 계속하기 (충돌 해결 후)
git rebase --continue

# 리베이스 완료 후 원격 강제 푸시
git push --force

# 현재 브랜치의 총 커밋 개수 확인
git rev-list --count HEAD

# 커밋 로그 간략히 확인 (한 줄로 축약된 커밋 히스토리를 최신순으로 보여줌)
git log -oneline

가장 최신 커밋이 아닌 과거의 커밋 메시지를 수정하기 위해 최근 2개의 커밋을 대상으로 인터렉티브 리베이스를 시작한다. 숫자 2는 최근으로부터 몇 번째 커밋을 수정할 건지에 따라 숫자를 조절할 수 있다.

 

📝 커밋 메시지 수정 과정 (Vim 기준)

1. `git rebase -i HEAD~2`명령어를 실행하면 텍스트 편집기가 열리고 커밋 목록이 pick으로 표시된다.

2. 수정하고자 하는 커밋의 pick을 reword로 변경한다.

3. ESC → :wq → Enter 를 눌러 저장한다.

4. reword로 지정한 커밋 메시지 편집창이 열리면, 원하는 메시지로 수정한 후, 다시 ESC → :wq → Enter로 저장/편집기를 종료한다.

 

🛠️ pick 외에 사용할 수 있는 명령어

pick - 해당 커밋을 그대로 사용
reword - 커밋 내용은 유지하고 메시지만 수정
edit - 해당 커밋 시점에서 멈추고 내용까지 수정 가능
squash - 이전 커밋과 합쳐서 하나의 커밋으로 만듦(메시지 편집도 가능; 어떤 커밋 메시지를 최종적으로 남길지)
fixup - 이전 커밋과 자동으로 합치되, 메시지는 유지 X
drop - 해당 커밋을 삭제

 

🧠 What I Learned

몇 번째 커밋을 수정하느냐에 따라, amend, rebase 중 어떤 명령어를 사용할지 알게 되었다. 
메시지 편집창이 따로 열리는 건지 모르고 pick → reword 수정 후 바로 커밋 메시지 부분을 고쳐서 뒤로 넘기니 수정이 되지 않았다. 2번째로 열리는 곳에서 커밋 메시지를 수정해야 수정이 반영된다.

 

 

반응형

+ Recent posts