잘못된 Author로 Push한 commit 수정하기

이혜원·2023년 8월 6일

잘못된 git config 수정하기

이슈

어느날 github에 가보니 그동안 올린 커밋으로 잔디가 안심겨 있는 현상을 발견했습니다.
레포지토리만 볼 때는 잘 올라가는 것 같았는데 왜 이러나 하다가

$ git log
commit 9417858b9d96e3ec80def9452619ac48bfaedc90 (HEAD -> frontend, origin/frontend, origin/HEAD)
Author: dev-hyewon <developer.hyewon@gamil.com>
Date:   Sun Aug 6 13:56:59 2023 +0900

    modify tech stack style

터미널로 로그를 확인하던 중 계정 이메일에 오타를 발견했습니다.
그렇습니다. gmail이 아니라 gamil로 설정되어 본래 계정과 불일치했던거죠...

github의 잔디도 안심어져 있는 걸 보니 며칠 전부터 이 상태였어요.
그동안 git push와 git pull 모두 정상 동작해서 눈치채지 못했네요.

원인

$ git config --list | grep '^user\.'
user.email=developer.hyewon@gamil.com
user.name=dev-hyewon

git config --list 명령어로 사용자 정보를 확인해봅니다.
잘못 설정된 git config가 보입니다... (흑흑)

해결

$ git config --global user.email "developer.hyewon@gmail.com"

git config --global user.email "$email" 명령어로 이메일을 수정합니다.
지금부터 만들어지는 커밋은 수정한 계정으로 저장될 겁니다.
문제는 이미 올라간 커밋들이 있는데, 무시할 수는 없다는 거죠.
이미 올라간 커밋도 수정해보겠습니다.



이미 push한 커밋 수정하기

1. 수정할 커밋 고르기

# 0. 로그를 확인해서 author 정보가 잘못된 커밋들을 확인합니다.
$ git log

# 1. 수정할 커밋 선정하기. 
$ git rebase -i --root


git rebase -i --root 명령어에 의해 root에서 부터 HEAD까지의 커밋들이 보입니다.
각 커밋 아이디(해쉬) 앞에 pick 명령어가 있는데, 이 중 수정할 커밋들만 e 명령어로 수정합니다.
마무리로 Esc 버튼을 눌러 vi 명령 모드로 변경하고, :wq를 입력해서 vi 종료하고 나옵니다.

Stopped at 05d2bdf...  Initialize project using Create React App
You can amend the commit now, with

 git commit --amend

Once you are satisfied with your changes, run

 git rebase --continue

vi가 종료되면 터미널에 위와 같은 Stopped at ~ 라는 메세지가 표시됩니다.

Shell 프롬프트에 표시되어 있던 브랜치에 REBASE N/M 문구가 생긴 것을 확인하면,
수정할 준비가 다 되었습니다.

2. commit author 수정하기

 # 2-1. author 정보 수정하기
 $ git commit --amend --author="dev-hyewon <developer.hyewon@gmail.com>"
 
 # 2-2. author 정보 git config 값으로 수정하기
 $ git commit --amend --author="$(git config user.name) <$(git config user.email)>"
 
 # 2-3. git config 값 변수 처리 후 author 정보 변수 값으로 수정하기
 $ name=$(git config user.name)
 $ email=$(git config user.email)
 $ git commit --amend --author="$name <$email>"

git commit --amend --author="$name <$email>" 명령어로 커밋 author를 수정합니다.
2-1번처럼 이메일을 다시 타자칠 자신이 없다면 2-2나 2-3으로 입력합니다.
명령어 입력 시 commitMessage에 대한 vi가 열리는 데 :wq를 입력해서 vi 종료 시킵니다.

3. 다음 커밋으로 넘어가기

# 3. 다음 커밋으로 넘어가기
$ git rebase --continue


git rebase --continue 시 다음 커밋으로 넘어가서 REBASE N/M의 N 숫자가 변경된 것을 확인할 수 있습니다.

만약 다음 커밋이 e명령어로 변경하지 않았던 커밋일 경우
e명령어를 사용한 커밋에 도달할 때까지 건너뜁니다.


위 이미지처럼 stopped 가 아닌 Successfully rebased 라는 메시지가 나오면
모든 커밋이 수정 완료된 것입니다.

모든 커밋이 수정될 때까지 git commit --amend --author="$name <$email>" 명령어와
git rebase --continue 명령어를 반복하면 됩니다.

4. 변경 사항 Github에 반영하기

#4. 저장소에 강제로 반영하기
$ git push -f origin HEAD

git push -f origin HEAD 명령어로 Github에 변경사항이 반영됩니다.

참고로 모든 커밋 수정 완료되기 전에 push해도 되지만 그럴 경우
HEAD 대신 브랜치 명으로 push해야해요.


Github에 이번주 동안 작업 했던 커밋의 잔디가 안심어졌었는데,
잔디가 파릇파릇하게 돋아났어요. 만족!

profile
일이 재밌게 돌아가는 군!

1개의 댓글

comment-user-thumbnail
2023년 8월 6일

좋은 정보 감사합니다

답글 달기