FrontEnd
Javascript
Diary
ML
CS
Django
Algorithm
AWS
Co-Work
HTML
CSS
Python
React
ReactNative

Github 잔디가 심어지지 않을 때

살아가다 보면 생각지도 못한 장애물을 맞이하게 될때가 있다. (사실 거창하게 썼지만 그렇게 큰건 아니다.)

오늘 소개할 Tip은 이에 대한 이야기다.

2018년 처음 Git과 Github을 알게 되었고 19년 열심히 잔디씨를 뿌렸지만 내 Github에는 잔디가 심어지지 않았다.

Github에 잔디가 심어지지 않을 떄

일단 해당 문제는 Github User-email 이랑 내 local의 User-Email 이 달라서 발생하는 문제라서

git config --list 

User-email 을 확인하고

git config --global user.email "바꿀 email"

이렇게 바꿔주기만 하면 된다.

그런데 이렇게 해주면 이후에 기록되는 commit부터 변경사항이 적용되기때문에 이전에 잘못작성한 Commit 은 그대로 잔디를 보여주지 않는다.

이전 Commit변경하기

git filter-branch --env-filter 'if [ "$GIT_AUTHOR_EMAIL" = "incorrect@email" ]; then
     GIT_AUTHOR_EMAIL=correct@email;
     GIT_AUTHOR_NAME="Correct Name";
     GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL;
     GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; fi' -- --all

Stackoverflow 에선 위의 코드를 작성해주면 잘못된 User-Email로 작성된 commit 의 Email을 수정할 수 있다고 한다. 이렇게 잘못된 Commit을 수정해주면 이전에 누락되었던 우리의 잔디도 되살아난다

이렇게 마무리를 해도 되지만 위의 명령어를 조금만 공부를 해보았다.

AuthorCommitter 의 차이

  • Author : 해당 코드를 제일 처음 생성한 원작자
  • Committer : 해당 코드를 최종 commit한 사람,

==> 따라서 Author와 Committer가 같으면 Committer는 생략할 수도 있다.

  • git filter-branch : 브랜치를 재작성 할수 있는 기능 (git filter-branch --help를 치면 filter-branch로 할수잇는 것들이 나온다.)
  • --env-filter <command> : 특정 경우에만 해당 명령어를 실행한다. (author,committer name, email, time 등 변수 재작성 가능)
  • linux의 shell script로 작성하는 if-else문

    if condition
    then
    commands
    else
    commands
    fi
  • --all 은 모든 브랜치 재작성, ----all 과 filter-branch옵션(--env-filter)을 분리해주는 역할정도로 생각해주면 될 것 같다.