커밋 메시지 수정하기
아래와 같이 다양한 상황에서 커밋 메시지를 수정하는 방법을 알아본다.
1. 최근의 커밋 메시지를 수정하고 싶은 경우
2. 과거의 커밋 메시지들을 수정하고 싶은 경우
3. 저장소에 이미 올라가 있는(Push 된) 커밋 메시지를 수정하고 싶은 경우
1. 최근의 커밋 메시지를 수정하고 싶은 경우_amend
커밋 메시지를 급하게 작성하느라 예기치 않은 오타가 발생하거나 여러 이유들로 인해,
메시지 작성 후 바로 수정하고 싶은 경우가 있다.
이럴 때는 amend 라는 커맨드를 사용해서 커밋 메시지를 수정할 수 있다.
amend는 가장 최근 커밋을 수정하는 커맨드이다.
이를 이용해서 커밋 메시지만을 수정할 수도 있다.
아래와 같이 새로 number 필드를 추가했다고 하자.
[변경_number 필드 추가]
그 후 커밋 메시지를 작성하는데 다음과 같이 오타를 적어 넣었다고 하자.
[잘못된 커밋 메시지]
[잘못된 커밋 메시지 로그]
이 경우 사용자는 바로 오타를 수정하고 싶을 것이다.
이제 amend를 사용해서 최근 커밋을 수정해 보자.
[amend]
위와 같이 커맨드를 입력하면 다음과 같이 커밋 메시지를 수정할 수 있는 편집창이 뜬다.
여기서는 Vim이 기본 편집기로 설정되었기 때문에 Vim 편집기가 사용되었다.
[커밋 메시지 수정]
편집기에서 커밋메시지를 수정하고 저장해 준다.
[커밋 메시지 수정 및 저장]
저장이 성공적으로 되었다면 다음과 같이 커밋 메시지가 수정된 것을 확인할 수 있다.
[git log]
편집기로 Vim을 사용하고 있는데 저장이 잘 안 된다면 git에 편집기가 설정되지 않았기 때문일 수 있다.
이럴 때는 다음과 같이 git에 Vim을 편집기로 설정해 주자.
[편집기 설정_git]
git config --global core.editor 'vim’
인텔리제이에 Git 관련 플러그인이 설치되어 있다면 인텔리제이를 통해 커밋 메시지를 수정할 수 도 있다.
다음과 같이 git의 log부분에 들어가 내가 변경하고 싶은 커밋을 확인한다.
[git log_intelliJ]
그 후 변경하고 싶은 커밋 메시지에 오른쪽 버튼을 누르거나 F2를 누르면 선택된 커밋 메시지를 수정할 수 있다.
[커밋 메시지 수정_그 1_intelliJ]
[커밋 메시지 수정_그 2_IntelliJ]
커맨드를 사용했을 때와 마찬가지로 커밋 메시지를 수정한 결과를 log를 통해 확인할 수 있다.
[git log]
2. 과거의 커밋 메시지 수정_rebase
git의 커밋 상황이 다음과 같다고 하자.
[git log]
이때 "name 추가" 뿐만 아니라 더 과거의 "number 추가" 도 수정하고 싶을 수 있다.
이럴 때는 rebase를 사용하면 된다.
rebase의 -i옵션을 사용하면 commit history를 조작할 수 있는 편집창이 나온다.
또한 HEAD~[숫자]로 최신 커밋을 포함한 [숫자]만큼의 커밋 메시지를 가져올 수 있다.
[rebase]
[rebase 편집 창]
이제 수정하고 싶은 커밋 메시지의 pick 부분을 reword로 바꿔준 뒤 저장한다.
[커밋 메시지 수정]
저장을 성공적으로 마치면 커밋 메시지를 수정할 수 있는 창이 연속적으로 나온다.
각 커밋 메시지를 수정해 주고 저장해 주면 해당 커밋 메시지가 수정된다.
[과거 커밋 메시지 수정_그 1]
[과거 커밋 메시지 수정_그 2]
모든 커밋 메시지를 수정한 후 로그를 통해 메시지가 잘 수정됐음을 확인할 수 있다.
[git log]
물론 인텔리제이를 통해서 과거 커밋메시지들을 수정할 수도 있다.
방법은 앞에서 설명된 것과 동일하다.
[과거 커밋 메시지 수정_IntelliJ_그 1]
[과거 커밋 메시지 수정_IntelliJ_그 2]
[git log]
3. 저장소에 올라가 있는 커밋 메시지를 수정하고 싶은 경우_push --force
커밋 메시지가 이미 저장소에 올라가 있는데 그 커밋 메시지를 수정하고 싶을 수 있다.
[저장소에 올라간 커밋 메시지]
이럴 경우에는 local에서 커밋 메시지를 수정 후, force를 사용해 강제적으로 push를 하는 수밖에 없다.
우선 수정할 커밋 메시지가 여러 개 이기 때문에 rebase를 통해 기존 커밋 메시지를 수정해 준다.
※ 커밋이 원격 저장소에 올라간 경우 인텔리제이를 통해 커밋 메시지를 변경할 수 없다.
[커밋 메시지 수정_rebase]
이제 push --force를 사용해서 강제로 원격 저장소에 변경된 커밋 메시지를 덮어씌워 주면 된다.
다만 강제적 push는 다른 협업자들의 작업을 없어지게 할 수 있기 때문에 --force-with-lease를 사용하는 것이 권장된다.
※ --force-with-lease는 브랜치에 지금까지 그 누구도 변화를 준 적이 없는지 확인하고,
변화가 있다면 강제 푸시를 못하도록 거부하는 옵션이다.
[push --force-with-lease]
강제 push 후 원격 저장소의 커밋 로그를 확인해 보면 커밋 메시지가 변경된 것을 확인할 수 있다.
[원격 저장소 커밋 메시지]
'Git' 카테고리의 다른 글
Github WorkFlow (0) | 2022.09.06 |
---|---|
Git Submodule (0) | 2022.08.24 |
댓글