깃허브(github) 잔디 안 심길 때 해결법 - rebase

wj·2023년 4월 21일
0

리액트 프로젝트를 이것저것 연습해 보려고
레포지토리 생성 후 스토리북 설치 및 기타 작업들을 기록으로 남겨두려고 했는데, 프로젝트 생성일인 4월 10일 이후로 커밋한 내용이 해당 레포지토리에서만 확인이 가능하고,
해당 날짜 잔디가 생성되지 않은 것을 알게 됐다.

물론 매일 커밋한 것은 아니라 다시 시작해도 그만이지만
언젠가 작업할 때도 이런 일이 생길 수 있기 때문에..!
원인 및 해결 방법을 열심히 찾아 보았다.

https://wellbell.tistory.com/43

위의 링크를 참고해서 해결했는데
주로 git 내의 user.name과 user.email이 github에 설정해둔 내역과 달라서 발생하는 경우가 많은 듯하다. 물론 나 또한 그랬음.

1. git config --list 로 정보 확인

git config --list

해당 명령어로 정보를 확인해보니 회사 계정과 내 개인 계정이 섞여 버린 탓에 회사 계정으로 연결이 되어있어서 잔디에 반영이 되지 않았다.

여기서는 방법이 두 가지인데,

📌 [해당 작업 폴더에서의 email을 변경할 때]

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

📌 [전체 local 환경의 email을 변경할 때]

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

나는 회사 계정을 메인으로 사용해야 하기 때문에
--global 명령어는 사용하지 않았고, 첫 번째 방법을 사용했는데 제대로 적용이 안되는 탓에 뒤에서 rebase와 함께 커밋마다 이메일을 변경해서 적용해 주었다. (4번 내용 참고)

2. 잔디가 안 심긴 해당 커밋 hash 코드 찾기

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

위의 명령어를 치면 아래 이미지처럼 commit 되었던 log들이 쭉 뜬다. 어느 커밋을 기점으로 잔디가 심기지 않았는지 확인한 후, 잔디가 심기지 않은 시점의 커밋 해쉬 코드를 복사해둔다. 나의 경우 최초 커밋 이후부터 새로 작성하려고 아래에서 두 번째 커밋 해쉬코드를 사용했다.

3. hash 코드로 rebase 하기

git rebase -i -r 해쉬코드

참고했던 링크에는 git rebase -i -p 명령어를 사용하라고 되어 있는데 아무리 해도 에러가 계속 떠서 해결 방법을 찾아 보니 더이상 -p 를 지원하지 않고 -r 을 사용해야 한다는 것..
(-p는 preserve 이고 -r은 rebase라고 한다.)

git rebase -i -r 4ea522b 를 입력하면 해당 커밋을 기점으로 작업됐던 커밋 내역들이 쭉 뜨는데, 변경해야 하는 커밋들을 찾은 후, a키를 눌러서 키보드로 이동한 뒤 pick을 edit으로 변경 -> esc 누르고 :wq 엔터로 내용을 저장하면 된다. (edit으로 변경할 때 a를 누르고 이동해야 하는 걸 몰라서 시간을 더 잡아 먹음,, 😂)

이 때 edit으로 변경하지 않은 커밋들로 인해 나중에 merge 시 conflict가 발생할 수도 있다고 한다. 맨 위의 첨부 링크에 해결 방법이 있으니 참고!

4. user.name 및 user.email 변경해주며 다시 commit 하기

내용을 저장하고 나오면
git commit --amend 명령어로 commit을 바로 할 것인지,
git rebase --continue 명령어로 다음 commit의 rebase를 계속 진행할 것인지 물어보는데 잔디를 새로 심어야 하는 커밋의 갯수만큼 rebase와 commit을 세트로 반복해주면 된다.

고로 방금은 rebase만 했으니 commit을 선택하면 되는데,
여기서 해당 커밋의 작업 이메일을 변경해줄 수 있다.

git commit --amend --author="user.name <user.email>"

📌 아까 git config --list로 확인했던 user.name과 user.email 대신, 내가 잔디를 심어야 하는 계정의 user.name과 user.email을 입력해야 한다!

위의 명령어를 입력하면 commit 메시지를 작성하라는 메시지 화면이 뜨는데 난 기존 커밋 메시지를 그대로 쓸 것이기 때문에 :wq 엔터를 눌러서 나왔다.

(아 참고로 vs code 내에서 git bash를 사용하면 rebase 대상 커밋이 얼마나 진행되었고 얼마나 남았는지 확인이 가능하다. powershell을 쓰니까 잔여 수가 안 나와서 rebase가 끝날 때까지 반복했음..)

5. rebase -> commit -> :wq엔터 반복 후 최종 push

git commit --amend 를 해주었으니
다시 git rebase --continue 해줄 차례..ㅎ 남은 커밋이 모두 rebase 될 때까지 rebase->commit->:wq엔터 과정을 반복해주면 된다. 10개 내외의 커밋이라 다행일 지경이었다. 그 마저도 순서가 헷갈림..

rebase가 모두 끝나면 git rebase --continue를 입력해도 더 이상 대상이 없다고 뜨는데, 이 때 push를 해주면 해주면 끝!!

$ git push origin +브랜치이름**

나는 브랜치를 새로 만들지 않고 main 브랜치에서 작업을 했어서 git push origin +main 이라고 입력했다. 이것도 master에서 바뀐 걸 까먹고 있어서 헤맸다.

드디어 잔디 등장 🌱
회사 프로젝트나 중요한 작업이 아니라 천만다행이었다
휴..

profile
tistory로 옮겼습니다

0개의 댓글