⚡ TL;DR

git rebase -i HEAD~N

또는

git rebase -i <시작커밋해시>^
git commit --amend --author="이름 <이메일>"
git rebase --continue
git push --force

⚠️ 주의: 이미 원격 저장소에 푸시된 커밋을 수정하면, 협업 중인 동료와 히스토리가 달라질 수 있으니 혼자 작업할 때만 사용하세요!


📝 문제 상황: 잘못된 Git 작성자 정보

회사랑 개인 컴퓨터를 오가면서 같은 GitHub 저장소를 작업하다 보면, 어느 순간 커밋 작성자 정보가 꼬여버리는 일이 생깁니다.
저는 편하자고 global 설정에 회사 계정의 이름과 이메일을 등록해두었는데, 그 설정이 그대로 커밋에 반영된 게 화근이었죠.

그 결과, 제가 만든 커밋들이 회사 이메일로 올라가버리고, Contributor 목록에는 여러 명이 작업한 것처럼 보이게 됐습니다.

그래서 커밋 하나하나 작성자 정보를 다시 써주고, 수정된 이력을 GitHub에 반영하는 과정을 거쳤습니다. 정리해보면 아래와 같습니다.


🧩 상황 요약

  • 개인용 계정과 회사용 계정이 뒤섞여서 커밋 작성자 정보가 꼬임
  • GitHub Contributor에 엉뚱한 이름이 올라감
  • 커밋 히스토리를 정리해서 되돌리기로 결정

🛠️ 해결 과정

1. 인터랙티브 리베이스로 커밋 선택하기

git rebase -i HEAD~N

혹은 특정 커밋부터 리베이스하고 싶다면:

git rebase -i abc1234^

^ 기호는 해당 커밋 바로 이전 커밋부터 리베이스를 시작하겠다는 뜻이에요.

혹은 첫 커밋부터 싹 다 리베이스하고 싶다면:

git rebase -i --root

리스트가 열리면 pickedit으로 바꾸고 저장하면 됩니다.

💡 빠르게 수정하는 팁

커서가 pick에 있으면 dw 입력해서 pick 삭제 → i e로 edit의 e만 입력해도 됨 (edit 대신 e만 써도 됨) 즉, 커서 올리고 dw, i, e 입력 후 저장(:wq)하면 끝!


2. 작성자 정보 수정하기

git commit --amend --author="새로운이름 <newemail@example.com>"

이렇게 하면 해당 커밋의 작성자를 내가 지정한 이름과 이메일로 덮어쓸 수 있습니다.
여기서 설정한 작성자는 이 커밋에만 반영되기 때문에, global이나 local 설정을 건드릴 필요는 없어요.


3. 리베이스 이어가기

git rebase --continue

하나의 커밋을 수정한 뒤에는 이렇게 입력해서 다음 커밋으로 넘어갈 수 있어요.
하나씩 반복해서 전부 수정해주면 됩니다.


4. GitHub에 반영하기

git push origin +main

마지막으로 강제로 푸시해줘야 원격 저장소도 바뀐 히스토리를 반영할 수 있어요.
+main--force와 같은 역할을 하며, 강제로 기존 기록을 덮어씌웁니다.


🧭 마무리

이런 일이 있고 난 후 저는 global 설정을 다 지워버렸습니다.
대신 프로젝트마다 .git/config에서 로컬로만 이름과 이메일을 관리하고 있어요.
조금 번거롭긴 해도, 앞으로 이런 실수를 반복하지 않기 위한 예방책이죠.


🗂️ TMI
참고로… GitHub에 이미 푸시한 커밋 때문에 Contributor로 등록돼 버리면, 커밋을 고쳐도 Contributor 명단은 안 바뀝니다.
전 결국 저장소를 지우고 새로 만들었습니다… 😇
(이건 진짜 최후의 수단이에요.)


작은 실수 하나가 히스토리를 망가뜨릴 수 있다는 걸 느낀 경험이었습니다.
혹시 비슷한 상황이 생겼다면, 이 글이 도움이 되었길 바랍니다.


📚 참고 자료
이 글은 madplay님의 블로그를 참고하여 작성되었습니다.