본문 바로가기
Git

💻 [Git 깃] 특정 Commit 수정 하기

by 까망 하르방 2021. 3. 13.
반응형

직전(최근) Commit 메시지 변경

git commit --amend

git commit --amend -m "{Your New Commit Message}"

git commit 후 가장 최근 Commit 2개 내역은 아래와 같다.

 

직전 Commit 내용 중 "login" → "logout"으로 변경하고자 한다.

(vim Editor를 활용해서 변경)

 

이번에는 "-m" 옵션을 통해서 간단한 message로 변경하였다.

두번째 방법으로는 "git rebase -i"가 존재하는데, 이때도 "git commit --amend" 이용하므로

해당 명령어가 현재 상태에서 가장 최근(직전) Commit Message를 수정한 것임을 상기.

 

 

git rebase -i 활용

git rebase -i {Commit ID}

git rebase -i HEAD~3 // 현재 HEAD부터 최근 3개 커밋을 rebase

최근 Commit 내역 4개를 들고온다.

아래 이미지에서 보이듯이 "red", "blue", "green" 이라고 적힌 Commit Message 변경을 시도해볼 것이다.

 

이때, git rebase -i 옵션으로 {Commit ID}를 선택할 때,

대상(범위) 이전 Commit을 선택한다!

위의 경우에는 "imsi"라고 적힌 4번째 이전에 Commit 한 것이 된다.

※ 만약 HEAD~{개수}로 명령어를 입력하는 경우에는 대상(범위) 개수 만큼이므로

    여기서는 "git rebase -i HEAD~3"이 된다. ("red", "blue", "green")

 

입력하면 vim Editor로 전환되는데, 변경하고자 하는 Commit Message를 구분해서

"pick" → "e" or "edit" 로 변경한 후, 저장하고 종료(:wq)

오래된 것일수록 상단에 위치한다.

 

빠져나왔을 때, 아래와 같이 rebase 수행 모드로 변경된 것을 확인할 수 있다.

현재 시점은 아까 목록에서 "e" or "edit"로 고친 Commit 지점에 멈춰있다.

 

즉, "red" - "blue" - "green" commit 3개 중 "red", "blue"만 edit 처리했기에 그 지점에서 멈추며,

     현재는 "red" commit이 수행된 직후 시점이라고 볼 수 있다.

 

여기서 "red" Commit 내용을 수정하기 위해서 아래 명령어 입력

git commit --amend

현재 시점에서 가장 최근 Commit이라하면 "red" 내용이 되는 것이다.

"red" → "orange"로 변경

 

Commit Message를 변경한 후, 다음 단계로 넘어가기 위해서 아래 명령어 수행

git rebase --continue

현재 위치를 표시하면 "orange" - "blue" - - "green" 와 같다.

여기서 "blue" Commit Message를 변경할 수 있지만 그러지 않고 다음 단계로 진행

초기에 "green" 변경(edit)할 것이라고 하지 않았으므로 rebase가 종료되었다.

결과를 보면 "red" → "orange"로 맞게 변경된 것을  확인할 수 있다.

 

 

주의사항

rebase를 사용할 때 주의해야 될 것은 rebase 대상의 Commit ID가 변경된다는 것이다.

위에서 보면 대상(범위) 였던 "orange" - "blue" - "green"의 Commit ID가 기존과 달라졌다.

이러한 변경은 자칫하면 다른 사람과 충돌날 확률이 매우 높다.

 

그렇기 때문에 여러 사람과 작업하는 공간에서 사용을 권하지 않기도하다.

충돌을 고려한다면 push 하기전 Commit Message 변경이나 Merge 되기전에 변경하는 것이 좋다.

 

경우에 따라서는 push한 Commit Message를 변경할 때도 있다.

Commit Message 변경 후 push 했을 때, 아래와 같이 오류가 발생한다.

git push {원격 Bracnk} {Local Branch}

Commit Message만 변경하고, 소스 변경은 하지 않았기에

Git에서 원격 Branch와 변경점이 존재하지 않기에 push를 막은 것이다.

이때는 -f 옵션을 통해서 강제로 push 할 수 있다.

이러한 "-f" 옵션이 권장되지는 않는다.

push되고 Merge된 Commit 로그를 갖고 있던 다른 팀원들이

로그를 수동으로 수정해줄 필요가 있기 때문이다.

큰 문제없이 시도한다면 push 하고 Merge 되기 전 <PR 및 리뷰 단계>에 시도하는 것을 권장한다.

 

 

📌 Git 목록

 

[까망] Git 목록

본 블로그에 작성된 Git 관련 내용 URL을 정리한 곳입니다. 목록 [Git] "git add -p" 를 활용하는 이유 [Git] .gitignore 설정 [Git] learngitbranching 답안 및 풀이 - 1 [Git] learngitbranching 답안 및 풀이 -..

zoosso.tistory.com

반응형

'Git' 카테고리의 다른 글

[Git 깃] 특정 내용(부분)만 git add -p 하기  (0) 2021.03.14
[Git 깃] git log 탈출하기  (0) 2021.03.13
[Git 깃] git diff  (0) 2021.03.13
[Git 깃] git clean  (0) 2021.03.13
[Git 깃] git add  (0) 2021.03.13

댓글