본문 바로가기
Git

[Git/GitHub] 어? 커밋을 했는데 잔디밭이 안생겼네 ?!

by 지구 2021. 7. 7.

github 에 들어갔다가 구멍난 잔디밭을 발견했다.

확인해보니 커밋을 내 개인 계정이 아닌 회사 계정으로 했었다.😑  (회사에서 git cli 로 커밋해서 그랬구나..)

변경 전 예시

 

그래서 우선 특정 프로젝트에서는 개인 계정으로 push 될 수 있도록 설정 값을 변경했지만...
문제는 이 전에 커밋한 이력들에 대한 작성자(author) 변경이었다.

$ git config user.name  #하지수
$ git config user.email #hajs@회사메일

$ git config user.name [변경하고자 하는 이름]
$ git config user.email [변경하고자 하는 이메일]

 


그래도 잔디밭을 가꾸시는 분들이 많아서 조금만 검색해도 여러 방법이 있다는 걸 알게 되는데,
나는 그 중에서 `git filter-branch` 기능을 사용했다.

$ git filter-branch --env-filter '

FIND_EMAIL="[찾으려는 이메일]"
CHANGE_NAME="[변경하고자 하는 이름]"
CHANGE_EMAIL="[변경하고자 하는 이메일]"

if [ "$GIT_COMMITTER_EMAIL" = "$FIND_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CHANGE_NAME"
    export GIT_COMMITTER_EMAIL="$CHANGE_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$FIND_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CHANGE_NAME"
    export GIT_AUTHOR_EMAIL="$CHANGE_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

그럼 이렇게 rewritten 되는 상태가 되는데, 이 변경점을 origin 에 push 해주면 된다 :)

$ git push origin +master

 

참고로 `+master` 로 push 하지 않으면 아래와 같은 오류를 만날 수 있다.

! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/...' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

그럼 이제 commit author 가 내 개인 계정으로 바뀌게 되고, 죽은(?) 잔디는 다시 되살아 난다! 😎


...
모든 것은 이렇게 끝나면 아름답겠지만 예외는 있는 법,
혹시 진행하다가 아래와 같은 오류를 만나게 된다면 (내 얘기)

Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f

`git-filter` 실행문 첫 줄에 `-f` 옵션을 추가해서 진행하면 된다 :)

$ git filter-branch -f --env-filter ...

하  지  만

한 방에 커밋 내용이 변경된다는 것은 hash 가 변경된다는거니까 개인 플젝에서 사용하거나 꼭꼭 주의해서 사용하도록 하자 !!!

반응형

댓글