[OSS 2022/Tablecloth] Pull Request 후 Rebase 처리

OOSUlZ·2022년 9월 5일
0

부제 : fork한 프로젝트 Main branch에서 작업하다 PR 꼬였을 때 commit 살리기...

○ PR올렸다고 끝난게 아닙니다

OSS 2022 활동을 하며, Tablecloth에서 1인 1이슈를 잡고 PR까지 올리는 데 성공했다.
그런데 마주 하게된 메인테이너님의 코멘트

계속 밤에 Gmail에서 PR이 캔슬되었다고 메일이 왔는데.. 다행히도 코멘트처럼 그 문제되는 부분을 수정해주셨다. 부탁하신대로 적용을 위해 rebase를 하려 예전에 정리해놓은 걸 찾아보다가, PR 하고나서의 경우는 좀 다를 거 같아서 구글링을 해보는데..
들어가는 곳마다 하는 방법이 전부 달랐다(?!)

결국 멘토님에게 도움요청 ..

그리고 바쁘신 와중이신데도 퇴근하시고 나서 너무나 친절하게 처음부터 끝까지 다 알려주셨다..
정말 생명의 은인이시다😂

아무튼 도움을 받아 rebase를 차근차근 진행하려는데 마주친 안타까운 상황

내가 메인 dev 브랜치에서 바로 작업을 해버려서 commit 하기 전으로 되돌리는 .. 수고로운 사전작업이 필요했다😭
브랜치 새로 파서 하라는거 알고 있었는데 듣고나서 아차 했다 ...

○ 작업 과정

branch 가 어떻게 그려지는지 확인하기 위해 알려주신 명령어를 git bash에 입력하였다

> git log --all --decorate --oneline --graph

내가 commit 한 작업 branch 위에 무언가 많이 생겨있다..
git sync후 fetch를 하고나니
origin의 head(커밋)이 Merge branch 'yourtablecloth:dev' into dev 로 바뀐 상황
근데 원본 저장소의 최신 커밋은 저게 아니였다..

원본과 맞춰 주기 위해 몇가지 작업을 실시하였다
이 때 알려주신 명령어가 바로 이 것이다.

git reset HEAD^

가장 최신 커밋 취소 + stage 취소
Stage란 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미

그리고 git status를 해보면 뭔가 생겨있다

정상적으로 취소된 상황!
git checkout .를 통해 완전히 불필요했던 commit들(변경사항)을 삭제했다

그리고 github syncgit pull을 통해 원격저장소에서 파일을 당겨오고
git stash를 통해 #79번째 커밋을 저장했다

git stash list를 통해 리스트를 확인하고
git stash apply stash@{0} 를 통해 저장한 #79 commit을 불러오고,

git bash 강제종료로 인해 사진이 이때부턴 없습니다ㅜ

그리고 나서 원격저장소에 강제로 push 하기 위해 다음 명령어를 사용했다

git push -u --force (-f도 가능)

사용자의 로컬 변경사항들이 원격 변경사항들과 호환되지 않는 경우 (즉, 원격 브랜치를 fast-forward 시킬 수 없다거나, 혹은 원격 브랜치가 로컬 브랜치의 직계 조상 (direct ancestor) 이 아닌 경우 등) 사용자의 변경사항을 push 하는 유일한 방법은 force push 를 이용한다
(출처 : https://nochoco-lee.tistory.com/226)

이럴 때, origin(원격저장소)이 변경되어 자동으로 PR올렸던게 닫히게 된다...!

그리고 불러온 이 저장소가 바로 깨끗한 .. 상태의 origin이었다.
있어서는 안되는 commit들이 모두 제거된 깨끗한 상태로 바뀌었다.
이상태에서 sync를 해주니 원본 저장소와 원격저장소의 상태가 같아졌다 휴~

그리고 나서 git stash apply를 통해 내가 했던 작업을 불러오고,

git add . >> git commit -m "본래 커밋메시지" >> git push를 통해
본래 수정내역을 원격 저장소에 올렸고 닫힌 PR게시물을 다시 올려서 성공적으로 PR이 되었다.

명령어 요약
1. git log --all --decorate --oneline --graph (branch 그림 확인)
2. git reset HEAD^ (커밋취소)
3. git status (파일상태확인)
4. github sync (원격 저장소 최신화)
4-1. git pull (원격저장소에서 파일 가져오기)
5. git stash (작업을 임시로 저장)
6. git stash list (저장 리스트 확인)
7. git stash apply stash@{0} (리스트중 저장한 작업 불러오기)
8. git checkout . (모든 불필요한 커밋(변경사항)을 취소)
9. git push -u --force (강제로 원격저장소에 push)
10. github sync (원격 저장소 최신화)
10-1.git pull (다시 당겨오기)
11. git stash apply (내가 했던 작업 불러오기)
12. git add . (스테이지에 파일올리기 / . 의미는 모든 변경점을 반영 )
13. git commit -m "본래 커밋메시지" (이전 커밋과 같은 내용으로 다시 올리기)
14. git push (원격 저장소 올리기)
15. 다시 PR 게시글 올리기 (이전 PR 게시물 넘버 인용)

○ 오늘 알게 된 교훈

절대로 fork한 main branch에서 작업하지 말자
절대로 fork한 main branch에서 작업하지 말자
절대로 fork한 main branch에서 작업하지 말자
절대로 fork한 main branch에서 작업하지 말자
절대로 fork한 main branch에서 작업하지 말자
절대로 fork한 main branch에서 작업하지 말자
절대로 fork한 main branch에서 작업하지 말자
절대로 fork한 main branch에서 작업하지 말자
절대로 fork한 main branch에서 작업하지 말자
절대로 fork한 main branch에서 작업하지 말자
추가로 fetch는 언제든지 해도 된다
git stash apply --index를 적을 때, stash@{0} 부분을 그대로 적자 ...
이런식으로 PR이 닫혔을 땐, 새로 PR을 열고 이슈넘버를 인용하여 사유를 적는다
기본기에 충실하자..

아까 블로그마다 방법이 전부 다르다고 했었는데, 개개인마다 활용을 어떻게 하느냐에 따라 전개가 달라지기 때문이다 그래도 결국 핵심은 본질이 같다는 것이었다. 실전에서 이렇게 해보니 얻어가고 배워간게 정말 많다.
마지막으로 덧붙이자면 멘토님께서 도와주셨지만.. 내가 정말 많이 헤맸다..😶
정말 쓰기 부끄럽지만 PR 자체도 살면서 처음 하고.. vim으로 코드써본게 3년전이라 ..
기억이 잘 안나서 죄송할정도로 헤맸다 당황해서 그 이후에도 git add같은 기본적인 것도 우왕좌왕.. 하
심지어 저 코드 요약적는것도 도와주셨다!!🤩
아무튼 멘토님에게 무한 감사를 표하며 이번 게시물을 마치도록 하겠다 :)

profile
천천히,꾸준하게

0개의 댓글