여러대의 컴퓨터나 여러개의 이메일 주소를 번갈아가면서 개발을 하다보면 git이 author 설정이 안되어 있는 경우가 있다.
아직 커밋을 하기 전이라면 아래와 같은 명령어로 git 사용자의 이름과 이메일을 설정할 수 있다.
git config --global user.name "sample"
git config --global user.email "sam@ple.com"
git config user.name "sample"
git config user.email "sam@ple.com"
하지만 이미 무수히 많은 커밋을 해버렸으면..? 협업을 하는 프로젝트는 작업한 커밋의 author 정보만 변경해야되지만, 혼자 개발하는 사이드 프로젝트의 경우는 모든 과거 커밋 히스토리의 이메일과 이름을 변경할 수 있는 방법이 있다.
아래의 스크립트는 기존의 커밋을 덮어씌우기 때문에 신중히 사용해야한다.
git filter-branch --env-filter '
WRONG_EMAIL="wrong@example.com"
NEW_NAME="New Name Value"
NEW_EMAIL="correct@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$WRONG_EMAIL" ]
then
export GIT_COMMITTER_NAME="$NEW_NAME"
export GIT_COMMITTER_EMAIL="$NEW_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$WRONG_EMAIL" ]
then
export GIT_AUTHOR_NAME="$NEW_NAME"
export GIT_AUTHOR_EMAIL="$NEW_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
명령어를 입력하면 커밋의 시간 및 순서는 유지되고, 이름과 이메일만 변경된다!
git log
git log 명령어로 수정된 사항이 반영됬나 확인 후,
원격 저장소에 이미 올라갔다면 force 옵션을 추가로 설정해서 기존 커밋들을 덮어씌우면 된다.
git push -f
언제나 말하지만 force 옵션을 쓸 일이 없게 만드는게 가장 좋다.