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 가 변경된다는거니까 개인 플젝에서 사용하거나 꼭꼭 주의해서 사용하도록 하자 !!!
반응형
'Git' 카테고리의 다른 글
[git] core sparse-checkout 기능 사용했다가 롤백한 이야기 (0) | 2022.12.22 |
---|---|
한 프로젝트를 GitHub로 다같이 형상관리하는 방법 (0) | 2018.07.07 |
Git 기본개념 (0) | 2018.05.14 |
댓글