이번 포스팅은 제가 project하면서 겪었던 git issue에 대해 살펴보고 해결방안을 살펴볼려고 합니다!
git에서 proj를 하고 main이 아닌 다른 branch에서 commit하고 main으로 PR을 날린상황입니다.
이전에 commit했던 기록들까지 다 저장되는 현상들이 발생했습니다. 어떤 현상이 발생했는지 아래 그림을 통해 살펴보겠습니다.
위에 그림에서 저는 맨 아래 'feature/convert-to-poetry-in-ci-process' commit만 날려서 PR한 상황인데 이전에 commit한 내역까지 모조리 저장이 되었습니다. 지금 뭔가가 충돌난거 같죠..? 여기서 생각해볼 수있는 해결방법은
1. main 자체가 엄청나게 꼬였다.
2. origin/main을 최신화를 시키지 않고, main에 쌓아두었다가 commit했다!
이 두가지 가설을 세워볼 수가 있습니다
저는 이 중에서 main자체가 엄청나게 꼬였다! 라는 가설을 먼저 깔고 가겠습니다.
# Git 저장소의 원격 저장소인 origin에 대한 정보를 먼저 보자!
git remote show origin
위의 명령어로 원격 저장소의 정보를 볼 수 있습니다.
# git remote show origin 파헤치기
- git remote : 이 명령어는 원격 저장소의 이름을 출력해줍니다. (보통은 orgin 출력)
- 저장소를 clone하면 origin이라는 리모트 저장소가 자동으로 등록되기 때문에 origin이라는 이름을 볼 수 있습니다.
- git remote -v : 원격저장소 이름과 URL을 함께 볼 수 있습니다.
- 원격저장소가 여러 개 있다면 등록된 전부를 보여줍니다.
- 원격저장소가 여러개 등록되어있다면 다른 사람이 기여한 내용을 쉽게 가져올 수 있습니다.
- git remote show origin : 원격저장소의 구체적인 정보를 확인할 수 있습니다.
- git pull 명령을 실행할 때 main branch와 merge할 branch가 무엇인지 볼 수 있습니다.
- git push 할 때 branch마다 원격저장소와 비교해 어떤 상태인지 보여줍니다.
- up to date : 최신상태
- local out of date : 최신 정보가 아니라 뒤떨어진 정보
- fast-forwardable : 앞서간 정보
# branch를 main으로 바꾸기
branch 변경은 checkout으로 가능합니다. -b옵션을 주면 새로운 branch생성입니다.
git checkout main
branch를 main으로 변경완료했습니다.
# git log 살펴보기
현재 꼬여있는 저의 git상태를 git log로 살펴보겠습니다.
HEAD -> main은 로컬 저장소가 위치한 commit 주소이고, origin/main, origin/HEAD가 가르키는 commit주소가 서로 다릅니다. 정상적이라면 HEAD -> main과 origin/main, origin/HEAD는 같은 commit주소를 바라봐야합니다.
서로 다른 주소를 가르키니 뭔가 이상하죠?
# git log를 pretty옵션으로 한줄한줄 보기
그러면 어디서부터 꼬였는지 확인하기 위해 git log를 pretty옵션으로 한줄한줄 보도록 하겠습니다.
git log --pretty=oneline
역시나 HEAD -> main과 origin/main, origin/HEAD가 가르키는 commit이 다릅니다!!
그렇다면 이전으로 되돌려서 초기 상태로 가서 main을 깨끗하게 해줘야겠습니다.
ps) main이 안꼬이고 정상적이라면 이런 형태가 나와야해요..!
HEAD -> main과 origin/main, origin/HEAD가 commit주소가 같은거 보이시죠?! 이 경우가 정상적인 경우입니다.
# 5단계 이전으로 되돌려버리자
git reset HEAD~5 --hard
해당 명령어로 5단계 이전으로 되돌아 버리고 다시 git log --pretty=online으로 상태를 보았는데...
위의 빨간색 박스와 비교해보았을 때, 아래 빨간색 박스와 commit 주소가 다른거 보이시나요?
제 컴퓨터에 있는 main이 완전히 꼬여버린 것 같습니다......
# cherry-pick으로 정상적인 commit을 가져오자!
제 main이 완전히 꼬여버렸습니다... 그래서 이전에 commit 중 정상적인 commit을 가져와다 콕 집어서 새로운 branch에 적용하겠습니다.
git cherry-pick <commit hash>
.
.
.
.
.
'Github' 카테고리의 다른 글
CRLF, LF 차이에 대해 알아보고 git설정해보기 (0) | 2023.12.14 |
---|---|
git push할 때마다 password 입력하라고 나올 때 해결법! (0) | 2023.12.14 |
git conventional commit에 대해 살펴보기 (0) | 2023.12.14 |
Git 원격저장소에 있는 내가 원하는 PR commit만 gh로 가져오기~! (0) | 2023.12.14 |
나만의 git정리 (0) | 2023.11.05 |