커밋 메시지 컨벤션이 잘못돼서 그걸 해결하고자 git commit —amend
를 했다. push해서 원격 저장소에 올리기 전 상황이었다면, 문제 없이 잘 동작했을 것이다. 그런데 이미 원격 저장소에 push한 상황이었고…나는 그 상황에서 로컬에서 커밋 메시지를 변경했다.
그나마 다행인 건, 변경된 메시지를 다시 푸시하지 않았다는 것이다… 푸시를 하게 되면 force를 사용해야 돼서 팀원의 커밋 상황이 꼬일수도 있기 때문이다. 나 혼자 작업하는 것이라면 그냥 force를 통해 올려버릴텐데 그게 아니라서 조심스러웠다.
그냥 커밋 메시지만 바꾼 것 아니냐! 할 수도 있는데 amend
명령어는 기존의 커밋을 수정하는 것이므로, 커밋 메시지뿐만 아니라 커밋 자체를 변경한다.
과거의 커밋을 변경할 때 주의해야 한다. Rebase와 같이 이미 Push 한 커밋은 수정하면 안 된다.
https://git-scm.com/book/ko/v2/Git-도구-히스토리-단장하기
이 문제를 해결하려면 두 가지 방법이 있다.
로컬의 변경 내용을 원격 저장소의 브랜치에 강제로 덮어쓰기 → 협업 상황에서는 비추천
$git push -f origin [브랜치명]
로컬에서만 생긴 문제니 내 브랜치를 삭제하고 원격 저장소의 브랜치를 받아오기
어떻게 해결할까...생각하다 두번째 아이디어가 떠올라서 시도했고…다행히 성공했다😭
아래는 해결 방법이다
$git branch
# 현 브랜치 위치가 삭제할 브랜치 위치에 있으면 브랜치 옮기기
$git checkout main
git branch -D <내 브랜치> # 로컬 브랜치 삭제
-D를 쓴 이유는 해당 브랜치에서 커밋한 내용이 merge 되지 않았기 때문이다. 그래서 강제 삭제를 했다.
$git remote update
git branch -r
git branch -a
$git checkout [확인하고 싶은 브랜치]
$git log
(원격 저장소에 커밋한 게 로컬에도 반영 됐는지 확인하기 위해 로그를 봤다)
git commit —amend
를 통해 이전 커밋의 내용을 덮어쓰기 할 수 있다(덮어쓰기 할일이 있다면 푸시 전에 해야한다)