될때까지

((실습)) Rebase 및 Rebase 취소하기 본문

학습/살이되고 뼈가되어라

((실습)) Rebase 및 Rebase 취소하기

랖니 2022. 9. 14. 23:58
728x90

Rebase

불필요한 여러개의 커밋 메세지를 하나로 squash할 수 있었던 rebase.
merge를 사용하면 불필요한 merge commit이 생겼는데, rebase를 사용하면 이를 없앨 수 있다.

 

실습해보기

디렉토리를 생성하고 main.js파일을 작성한 뒤 아무 코드가 작성해서 add, commit 그리고 push까지 진행했다.
메인에서 새 브랜치 feature/test2를 생성하고, 여러개의 커밋을 만들고 sqush한 뒤에 pr을 올렸다.
근데 이게 왠걸? 커밋내역들은 하나로 합쳐졌는데 merge커밋이 생겨있다.

모야!!!! 왜 생겼어!!!

 

다시 실습해보자. 먼저 내 로컬과 리모트의 위치가 다르다. main으로 이동해서 pull origin main 명령어를 이용해서 둘의 싱크를 맞춰주자

테스트 브랜치를 생성하고 아무 코드나 작성한 뒤 3개의 커밋을 남겼다.

아래 명령어를 사용하고 제일 오래된 커밋메세지만 pick한뒤 나머지 커밋들은 s를 입력해서 squash를 진행하자

git rebase -i main

맨 처음 커밋만 남겨두고 나머지는 s처리. :wq!는 저장
그럼 커밋메세지를 선택하라고 뜬다. 하나만 남기고 다 지워주자
이름을 예쁘게 test로 남기고 똑같이 :wq!로 저장
git log로 확인해보니 3개의 커밋메세지가 1개로 잘 합쳐졌다.

squash까지 다 진행했으면 pr을 날린다.

git push origin 브랜치이름

깃허브로 들어가서 보면 pr이 올라왔다. 오른쪽의 파란색 pull request버튼을 누르고 pr을 작성한다.

그럼 아래와 같이 창이 뜨는데 여기서!!! merge pull request를 덥썩 누르지말고 옆에 삼각형을 눌러보자

이거지 이거

여기서 merge commit 생성하기 말고, 3번째의 rebase and merge를 선택하자. 설명글을 잃어보면 1개의 커밋만 rebase로 진행한다는 걸 알수있다. 버튼을 누르면 아래와 같이 뜨고

merge커밋이 안생긴걸 확인할 수 있다.

 

git rebase 취소 명령어

git reflog
// 돌리고 싶은 상태 id 복사
git reset --hard id주소넣기
728x90