Github 잔디가 없는 현상 발생! 기존 커밋 author(작성자) 수정으로 문제 해결



1. 문제 상황

열심히 잔디를 심기 위하여 이것저것 하다가, 어느 날 Github 상에서 잔디가 없는 것을 발견했습니다. 몇 일 간의 잔디가 없어져서 원인을 찾아보았습니다.

image

SourceTree 를 통해서 확인해보니 커밋 author(작성자)가 제 원래 username과 달라 잔디가 없는 현상이 발생하였습니다. 여러가지 계정을 사용하거나 오기되어있는 경우에 이런 현상이 발생할 수 있습니다. 이러한 현상은 rebase를 통해서 수정하는 과정을 거쳐서 정상적으로 다시 username을 변경할 수 있습니다.

2. 문제 해결

2.1. rebase 시작 _ branch 이동과 대상 commit 선택

rebase 수행을 하기 위하여 우리는 문제의 commit 직전으로 이동 + rebase 대상 commit 선택(pick → edit)하는 과정을 합니다.

먼저, 발생한 git 저장소에서 터미널을 연 다음에 아래의 명령어를 입력합니다. commit Hash 값을 입력하여 문제의 commit 직전으로 이동합니다.

# 입력해야 할 명령어
git rebase -i -p [커밋hash]

# example
git rebase -i -p 389787

위의 명령어를 수행하면 vim 편집 창이 뜨게 되고, 아래와 같은 문구들이 출력되게 됩니다. 저희가 위에서 문제의 commit 직전에서 수행했기 때문에, 문제의 commit부터 그 이후 commit한 이력이 commit한 순서대로 나오게 됩니다(먼저 commit한게 상단).

image

처음에는 모든 커밋hash 앞에 문구가 pick으로 되어 있는데 이를 edit으로 변경하면 우리가 고쳐야 할 commit을 선택할 수 있습니다. pick → edit을 하는 과정을 진행합니다. 저는 author가 이상한 commit만 선택하여 edit으로 변경하였습니다. 아래의 명령어를 Vim에서 사용하면 손쉽게 pick을 edit으로 변경할 수 있습니다.

# 시작줄부터 끝줄까지 pick을 edit으로 교체
:[시작줄],[끝줄]s/pick/edit/g

# example : 1부터 11줄까지 pick을 edit으로 교체
:1,11s/pick/edit/g 

2.2. author(작성자) 변경

# 입력해야 할 명령어
git commit --amend --author="사용자명 <이메일>"

# example : user user@gmail.com
git commit --amend --author="user <user@gmail.com>"

위의 명령어를 이용하여 username과 user@gmail.com을 입력하면 작성자를 변경할 수 있습니다. <> 도 예제와 같이 입력해주어야합니다. 입력 후 vim 이 뜨면 commit도 수정할 수 있는데, 원하면 수정하고 아니면 wq를 입력하고 넘어갑니다.

2.3. 다음 rebase 수행

# 입력해야 할 명령어
git rebase --continue

위의 명령어를 입력하면 2.1 과정에서 edit을 선택한 다음 commit으로 넘어가게됩니다. 2.2 에서 수행한 과정으로 이전 edit을 선택한 commit 은 정상적으로 고쳤다고 생각하고, 다음 commit으로 넘어가게 되는 것입니다.

2.4. 반복작업 _ 2.2 ~ 2.3

image

2.2와 2.3을 진행해주면 위와 같은 모습을 확인할 수 있습니다. 2.2의 명령어를 입력하여 author를 변경하고, 2.3의 명령어를 입력하여 다음 rebase를 수행합니다. 2.2와 2.3을 지속적으로 번갈아가면서 입력하면서 하나하나 commit 의 author를 하나하나 잘 변경해주면 됩니다. 이 때 잘 바뀌고 있는지 보려면 SourceTree 를 띄워놓고 Terminal 을 통해서 지속적으로 작업을 진행하는 것이 좋습니다.

간혹가다가 충돌이 나는 경우가 있는데, 이럴 경우 충돌이 난 소스코드의 충돌되는 부분을 찾아 해결해주면 됩니다.

2.5. Github Push

# 입력해야 할 명령어
git push origin +브랜치이름

# example : main branch에 push
git push origin +main

다 완료되었으면 원하는 브랜치이름 앞에 +를 붙여 push 해줍니다. 그렇다면 원하는 것처럼

reference