fork 툴 사용법 - rebase, squash, append

Yunes·2023년 10월 19일
0
post-thumbnail

여러 커밋중 일부 커밋만 이동시키고 싶은 경우

상황

코딩 테스트 문제별로 다른 브랜치에서 커밋을 하려고 했으나 다른 브랜치로 체크아웃이 되어 있지 않아서 기존 브랜치에서 이어서 커밋이 된 상황이다.

위의 경우엔 1996 번 커밋 2개를 main 위로 가져오고자 한다.

이때 fork 의 rebase 라는 기능을 활용할 수 있다.

rebase 는 git 커밋 기록을 나무에 가지가 뻗어나오는 것으로 비유하자면 가지가 뻗어나오는 base 를 다른 곳으로 옮겨주는 기능을 해준다.

그래서 먼저 1번 문제 브랜치가 원래 있어야 하는 시점인 1번 문제 풀이 커밋 위치로 1번 문제 브랜치를 rebase 해준다.

그리고 2번 문제 브랜치가 있는 곳으로 checkout 해서 2번 문제 브랜치를 제어한다.

( 순서가 다른 것 같은데 gif 를 찍을 예정이라 그것을 참고해보자 )

2번 문제 브랜치는 2번 문제 풀이 커밋을 한 시점으로 rebase

마지막으로 2번 문제 풀이 커밋 위치에서 2번 문제 브랜치를 원래 위치했어야 하는 시점으로 rebase 후 push 한다.

그럼 gif 를 확인하자.
gif 를 찍으려 했더니 이름을 가릴 방법을 모르겠어서 그냥 사진으로 대체했다.

먼저 이동하고자 하는 브랜치로 checkout 한다.

여기서는 9012번은 남기고 1996만 가져오고 싶다. 그리고 main 위로 rebase 하고 싶다.

Interactively Rebase 를 클릭하면 내 base 로부터 현재 커밋까지의 커밋 기록들을 보여주고 각각의 커밋을 가져갈지 Pick, 수정할지 Edit, 커밋 메세지만 수정할지 Reward, 다른 커밋들과 합치고 메세지를 유지할지 Squash , 다른 커밋들과 합치고 메세지는 버릴지 Fixup, 커밋을 날릴지 Drop 을 선택할 수 있다.

현재 1996 커밋이 2개라 하나로 합치기 위해 나중 커밋을 Squash 로 녹여서 다른 커밋과 합쳐주고 커밋 기록은 남겨줬고 9012 는 다른 문제에 대한 커밋이라 같이 rebase 할게 아니라서 Drop 해줬다.

Squash 한 커밋들은 합쳐진 목적지 커밋을 더블클릭하면 합쳐진 커밋 메세지들을 확인할 수 있다. 여기서 커밋 메세지를 수정할 수 있다.

다 선택하면 우측 하단의 Rebase 버튼 클릭

Rebase 클릭하려다 9012 번 커밋도 다 날라가면 슬플 것 같아 임시 브랜치를 만들었다.

Drop 도 있어서인지 conflict 이 나서 Resolve 를 선택하고 Drop 한 것을 stage 에 담아 rebase 를 진행했다. 이때 Abort 를 클릭하면 rebase 가 취소된다.

여기서 Continue Rebase 를 해주면 된다.

여기서 temp 를 만든 이유가 보인다.

rebase 는 로컬 브랜치와 거기에 포함되어 있는 커밋들을 다른 위치로 옮겨줄 수 있는 기능이다.
그래서 깃허브 로고가 있는 원격 브랜치의 커밋은 그대로 남아 있는 모습을 볼 수 있다.
즉, temp 를 만든 시점의 커밋또한 살아있는데 문제는 여기서 실수로 push 해버리면 temp 가 있는 위치의 커밋은 완전히 사라진다. ( 해당 위치 혹은 그 이후에 브랜치가 없다면 )

그래서 혹시나 하고 만들어뒀다.

이 상태에서 push 를 해보자. 그러면 1996 원격 브랜치가 내 로컬 브랜치로 따라올 것이다.

push 위치

커밋 기록에 변화가 있으면 Force push 를 해줘야 한다. 만약 커밋상 변화가 없는 채로 rebase 혹은 push 를 할때는 체크하지 않아도 상관없다. ( 커밋이 아니라 로컬 브랜치만 다른 위치로 이동시키는 경우 )

결과

9012 는 위에 다른 커밋에 이어서 남아 있어서 ( 같은 파일이 다른 커밋에 남아 있어서 ) temp 브랜치는 제거했다. 브랜치를 잃은 커밋은 사라진다.

완료

저 옆에 10828 과 9012 가 겹쳐져 있는 것도 같은 방식으로 해결하면 된다.

이건 방식이 같아서 결과만 첨부했다.

깔끔하게 9012, 10828, 1996 커밋 기록들이 분리되어 main 위로 rebase 된 모습

변경사항이 있는데 커밋을 추가하고 싶지 않을때 - append 사용

기존 컴밋이 있고 몇가지 변경점이 발생했는데 커밋을 추가하고 싶지 않고 이전 커밋에 합치고자 할때 중앙 하단에 있는 append 를 클릭후 Commit 하면 새로 커밋이 추가되지 않고 기존 커밋을 수정할 수 있다.

profile
미래의 나를 만들어나가는 한 개발자의 블로그입니다.

0개의 댓글