[TIL 54일차] 이미 push한 commit의 message 수정하기

이건·2024년 8월 12일

1. rebase로 에디터 들어가기

git rebase HEAD~1 -i

터미널에서 명령어를 통해 commit message를 수정하기 위해 에디터(편집모드)로 들어간다.

참고사항
위에서의 HEAD~1은 바로 직전 commit을 수정하고 싶을 경우이고,
HEAD~2, HEAD~3처럼 수정이 필요한 commit이 몇 번째 전인지 고려하고, 그 숫자로 변경해 입력하면 된다. 즉,

git rebase HEAD~[되돌아 가고 싶은 커밋 수] -i

하지만 나는 에러가 발생했는데, 이 오류 메시지는 Git에서 리베이스를 시도할 때 스테이징되지 않은 변경 사항이 있다는 것을 의미한다. 이 문제를 해결하려면 다음 중 하나를 선택해야 한다.

  1. 변경 사항을 커밋하기:
    현재 작업 중인 변경 사항을 커밋하여 스테이징된 상태로 만든다.

    git add .
    git commit -m "작업 내용 설명"
  2. 변경 사항을 스태시하기:
    현재 변경 사항을 임시로 저장하고 이후에 다시 적용할 수 있다.

    git stash

    이후 리베이스를 진행한 후에 스태시한 변경 사항을 복원할 수 있다.

    git stash pop
  3. 변경 사항을 버리기:
    현재 변경 사항이 필요 없다면, 이를 버릴 수 있다.

    git checkout -- .

이 중에서 적절한 방법을 선택하여 진행하면 되지만 다행히 1번인 변경사항을 커밋고 다시 명령어를 입력하니깐
이렇게 에디터로 들어왔다.

2. 에디터에서 pick을 reword로 변경

commit message 앞의 'pick' -> 'reword' 변경 후, esc -> :wq! -> enter
수정모드로 들어간다.

그러면 작성한 commit message가 보이는데 commit message를 수정해주고 완료했다면 esc -> :wq! -> enter순으로 해당 내용을 저장한다.

3. github에 push

수정을 한 후 git push origin 경로로 commit을 push하려 하지만, 붉은 에러 메세지만 반겨줄 뿐 push가 되지 않는다.

이 오류는 원격 저장소에 푸시하려는 브랜치가 원격의 해당 브랜치와 다를 때 발생한다. 즉, 원격 저장소에 이미 다른 커밋이 있어서 "non-fast-forward" 푸시가 거부된 것이다. 이 문제를 해결하려면 다음과 같은 방법을 사용할 수 있다.

  1. 원격 브랜치의 변경 사항을 가져오기:
    원격 저장소의 변경 사항을 로컬로 가져와서 병합한 후 푸시할 수 있다.

    git pull origin main
  2. 강제로 푸시하기 (주의):
    원격 저장소의 내용을 덮어쓰고 싶다면 강제로 푸시할 수 있다. 하지만 이 방법은 주의해야 하며, 다른 사람의 작업을 덮어쓸 수 있다.

    git push origin main --force
  3. 로컬 브랜치 재설정:
    원격 브랜치의 상태로 로컬 브랜치를 재설정할 수 있다. 이 방법은 로컬 변경 사항이 사라지므로 신중하게 사용해야 한다.

    git fetch origin
    git reset --hard origin/main

Step 4. 강제(force) push 수행
git push origin 경로 --force
git push origin 경로 --f
--force (--f로도 표기가능) 명령어는 원격 저장소의 내용이 로컬 저장소의 내용과 일치하도록 원격 저장소의 변경사항들을 강제로 덮어씌운다.

그리고 github를 가보면 정상적으로 push가 이루어져 있다.

git은 계속 느끼지만 어렵다...

0개의 댓글