git & github

github 잔디밭 안 심어지는 현상 해결 및 이미 커밋한 내용 반영하기

wellbell 2021. 2. 26. 09:45

 

1. github 잔디 안심어지는 현상 해결

흔히 잔디밭이라고 불리는 github contributions(activity) 나의 저장소 중 어디라도 commit해서 push해서 반영 시키면 잔디가 심어져야하는데 심어지지 않을때가 있다. 특정 저장소나 특정 컴퓨터에서 그럴수도 있고 전체에서 그럴수도 있다.

 

나는 잔디를 심어서 축구를 해야하는데...^^

 

이유는 간단하다 github 계정에 등록된 이메일과 커밋해서 푸시를 날리는 local 환경의 이메일 설정이 다르기 때문이다.

우선 깃허브 이메일을 확인하려면

 

1. 깃허브 settings로 들어가자.

 

2. Emails 메뉴로 들어가자.

3. 등록된 이메일을 확인하자.

 

4. local 환경의 git에 등록된 이메일을 확인하자

 

작업중인 폴더에서 cmd 또는 git.bash를 열고 아래 명령어를 치면 

git config --list

 

user.email 값을 확인할수 있습니다.

만약 여기서 email값이 다르다면 작업중인 폴더에서 commit을 하더라도 잔디가 심어지지 않게 됩니다.

 

5, 잔디 심어지게 설정하기

이를 해결하는 방법은 3가지 입니다.

 

1. 작업하는 폴더의 email값을 변경한다.

- cmd 혹은 git.bash를 작업하는 폴더까지 이동후 아래 명령어를 자신의 이메일을 넣어서 치면 바뀝니다.

git config user.email "내 이메일 주소"

 

2. local 환경의 git전체에 email값을 설정합니다.

- 위 방법이 특정 폴더에 한정되었다면 이번에는 전체에 영향을 주게됩니다. 그래서 혹시 다르게 해야하는 경우라면 위 방법을 이용하셔야합니다.

git config --global user.email "내 이메일 주소"

 

3. github에 설정한 이메일을 변경하기

- 깃허브 본인 셋팅의 이메일 메뉴에서 이메일 주소를 추가하시면 됩니다만 이 방식은 추천하지 않습니다. 

 

 

2. 이미 커밋한거 잔디 밭에 심어주기

위에서 설정을 변경하고 나면 그다음부터 커밋하면 잔디가 심어지는데..............

이미 커밋한건?

그대로 날리긴 뭔가 아까워서 알아보니 rebase를 통해서 심어줄 수 있었습니다.

저는 하나의 프로젝트가 안되는 줄도 모르고 개발해서 전체를 해야했습니다...ㅠㅠ

 

1. 안심고 지나간 커밋의 해쉬 코드 찾기

- 작업하는 폴더에서 아래의 명령어를 쳐서 git의 log를 확인합니다.

git log --pretty=format:"%h = %an , %ar : %s" --graph

 

- 이 로그 중 잔디를 심지 못한 commit 의 앞의 해쉬 코드를 기억합시다.

 

2. 해쉬코드로 rebase 하기

- 기억해둔 해쉬코드를 아래 명령어에 맞춰서 입력해줍니다.

git rebase -i -p 해쉬코드

- 그럼 약간의 시간이 지나고 나면 아래와 같은 화면이 등장합니다.

이들 중 변경해야하는 커밋들 맨앞에 쓰여있는 값들을 edit으로 바꿔줍니다.

 

edit은 수정하겠다는 의미이고 pick 그대로 두겠다는 의미로 이해 하시면됩니다. 수정이 되었다면 esc wq!로 해당 파일을 저장합니다.

 

이제 아래같은 내용이 등자하는데 이제 이메일값을 변경해봅시다.

 

커밋하는 사람의 이름으로 아무거나 상관없지만 사용하시는 닉네임, 영어이름 또는 깃허브 닉네임 등 맘에 드시는걸로 넣으시면 됩니다. commit할때 commit을 누가했는지 기록하는 부분이라고 생각하시면됩니다.

본인 이메일 부분에 깃허브에 등록한 그 이메일을 적어주시면 됩니다. 

맞춰서 적으신뒤 명령어를 입력해줍니다.

git commit --amend --author="이름 <본인 이메일>"

입력하시면 아래 화면이 뜨는데 저희는 잔디만 심을것이기 때문에 q를 통해서 나가줍니다.

나가서 보시면 이런 화면이 나오게 됩니다.

 

이때 이 부분을 보시면 현재 rebase 번호와 rebase대상 전체수를 확인하실수 있습니다. 만약 두개이상 rebase를 하신다면  맞주치실겁니다 .ㅎ

(저는 앞서 말했듯 하나의 프로젝트 전체를 해야해서 ... 242개 commit을 대상으로 합닏 ㅏ...ㅠㅠㅠㅠㅠㅠㅠㅠㅠ)

 

다음 파일 처리를 위해서 아래 명령어를 쳐줍니다.

git rebase --continue

 

그러면 아래 같은 화면을 확인 하실 수 있습니다. 이때 앞서 입력했던  명령어를 다시 입력해줍시다.

git commit --amend --author="이름 <본인 이메일>"

 

그럼 다시 파일이 뜨고 q를 통해서 빠져 나오시면 됩니다.

 

이제 반복입니다. rebase 대상으로 잡은 commit들 중 edit으로 한 애들 전부를 해줘야합니다.

(저는 대략 200번 ....ㅠㅠㅠ 하지말까 고민 했습니다...)

1.

git rebase --continue

2.

git commit --amend --author="이름 <본인 이메일>"

3.

q를 통해 빠져나오기

 

이 지옥의 반복 루프 마지막에 도달하시면 아래와 같이 나옵니다. (242번... 후 손이 저리네요)

이제 원격 저장소로 강제 푸시를 진행해봅시다.

(명령어에서 +쓰셔야합니다. 이거 안쓰면 다시 지옥의 루프로 돌아가실수도?)

# '+브랜치이름' 대신에 '-f 브랜치이름' 도 가능하다.
$ git push origin +브랜치이름

 

푸시가 성공적으로 진행되었습니다 .ㅎ (다행이다 .ㅠㅠ)

잃어버렸던 저의 잔디를 찾았습니다 .ㅎ

하다보시면 edit을 덜 설정하거나 해서 conflict가 발생하고 merge하라고 나오는데 해결이 안되서 되돌리고 싶어질수가 있습니다. (그사람이 바로 접니다. ㅎ)

 

방법은 간단합니다.

 

아래 명령어를 통해서 진행하던 rebase를 박차고 나옵니다.

git rebase --abort

 

아래 명령어를 통해서 아래처럼 rebase 시작하기 전 head의 해쉬값을 기억합시다 .

git reflog

 

아래 명령어를 통해서 reset을 해버립니다.

git reset --hard 커밋해시코드

 

과정을 하면서 200개를 노가다로 해보니 다음부터 꼭 ....... 프로젝트 시작할때 확인해야지 라는 다짐을 하게 되었습니다 .ㅎ