다른 사람이 쓰던 PC에서 config설정을 하지 않으면 커밋한 사람이 내가 아니게 된다. 아래부터 진행
git config --global user.name 이름
git config --global user.email 이메일
먼저, rabase 도중 문제가 생겨서, 처음 상태로 되돌리는 법
git rebase --abort
가장 최근 커밋 1개의 작성자 수정
- 아직 push하지 않은 가장 최근 커밋의 작성자만 수정하려면 아래처럼 한다.
git commit --amend --author="이름 <이메일@example.com>" --no-edit
- 이미 push한 커밋이라면 히스토리가 바뀌므로 다시 push할 때 강제 push가 필요하다.
git push --force-with-lease
여러 개의 커밋 작성자 수정
- 여러 커밋 중 일부를 수정하려면 interactive rebase를 사용한다.
git rebase -i --root
- 열린 목록에서 수정할 커밋의
pick을 edit으로 바꾼다.
edit abc1234 잘못된 작성자 커밋pick def5678 정상 커밋
:wq
- Git이 해당 커밋에서 멈추면 작성자를 수정한다.
git commit --amend --author="이름 <이메일@example.com>" --no-edit
git rebase --continue
모두 수정할때 (스크립트 활용)
- 커밋 전체에서 특정 이메일을 다른 이름과 이메일로 바꾸려면 아래처럼 사용할 수 있다.
- 실행 전에는 반드시 백업 브랜치를 만들어두는 것이 좋다.
git branch backup-before-author-fix
git filter-branch --env-filter 'OLD_EMAIL="잘못된이메일@example.com"CORRECT_NAME="내이름"CORRECT_EMAIL="내실제이메일@example.com"if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]then export GIT_COMMITTER_NAME="$CORRECT_NAME" export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"fiif [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]then export GIT_AUTHOR_NAME="$CORRECT_NAME" export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"fi' --tag-name-filter cat -- --branches --tags
git log --format='%h %an <%ae> / %cn <%ce>'
git push --force-with-lease --allgit push --force-with-lease --tags
- 단, 이미 다른 사람과 공유된 브랜치의 히스토리를 바꾸면 팀원들의 로컬 저장소와 충돌이 생길 수 있다.
- 협업 중인 저장소라면 반드시 팀원과 합의한 뒤 진행해야 한다.