헷갈리는 rebase 에 대해 정리하고 실습하는 시간을 가져보자 !!
1. rebase 는 언제 사용할까 ?
아래 이미지로 히스토리 상태를 확인해보자.
현재 master 브랜치와 A 브랜치가 머지된 상황이고, 여기서 원하는 작업은 master 브랜치와 B 브랜치와 머지를 진행하려고 하는데..
master 2 [ccf4602] 커밋에서 A, B 브랜치가 나눠졌고, master 브랜치와 B 브랜치의 fast-forward 머지가 불가능한 상황이다 !
(혼동하지 않기 위해 A 브랜치를 따로 삭제하지는 않았다 😀)
3-way-merge 가 불가피한 상황인데, 이럴 때 깔끔한 머지를 위해 rebase 를 사용할 수 있다.
2. 예시
reabse 가 항상 헷갈렸었는데 간단하게 생각하면 ..
옮기고 싶은 브랜치의 최신 커밋을 HEAD 가 가리키도록 해주고, 옮길 위치를 적어주면 끝난다. 아래 예시를 확인 ~
B 브랜치를 rebase 하고 싶다면 ? git checkout rebaseTest-b
master 브랜치 뒤로 옮기고 싶다면 ? git rebase master
그렇다면 직접 명령어를 사용해서 시도해보자.
3. 사용 시 주의사항
cherry-pick 글에도 적었지만 rebase 명령어 또한 커밋 고유 번호인 체크섬이 바뀌기 때문에 다른 개발자와 같은 브랜치 내에서 협업할 때, 이미 원격 저장소에 푸쉬된 커밋은 rebase 를 사용하지 않는 것을 권장한다. (충돌이 발생할 수도 있으니까)
4. 궁금증
직접 몸으로 때워보는 시간
첫 번째 궁금증)
위 예시와 반대로 하면 어떻게 될까 ?
즉, 현재 master 브랜치와 B 브랜치가 머지된 상황이고, master 브랜치 뒤로 A 브랜치를 rebase 한다면 ?
위 예시와 순서만 바뀔 뿐 rebase 가 잘 된 것을 확인할 수 있다. (원리를 이해하니 왜 반대로 됐는지 이해할 수 있었다 👍)
두 번째 궁금증)
HEAD 가 가리키는 커밋이 브랜치의 최신 커밋이 아닌 상태에서 해당 커밋 하나만 rebase 해서 다른 브랜치 뒤로 옮길 수 있을까 ?
HEAD 가 가리키는 커밋을 각 브랜치의 최신 커밋이 아닌 커밋으로 바꾸고 master 브랜치 최신 커밋 뒤로 옮겨보자.
이 상태에서 git rebase master 명령어를 사용하면 test-a-2 [8561611] 커밋 뒤로 test-b-1 [7a71c33] 커밋이 옮겨질까 ?
가지 순서가 좀 바뀌긴 했지만 아무 문제 없이 원했던 커밋 뒤로 옮겨진 것을 확인할 수 있다 !
이후 git branch -f master 명령어를 사용해서 HEAD 가 있는 곳으로 master 브랜치를 옮겨주고 checkout, switch 로 HEAD 가
master 브랜치를 가리키도록 하면 작업 완료 👍
음.. 근데 이렇게 하나만 옮길 꺼면 cherry-pick 을 사용해도 되지 않나 ..? ㅋㅋㅋ
아무튼 궁금증 해결 ㅎ_ㅎ
'Git, Github' 카테고리의 다른 글
[Git, Github] 리베이스 rebase --onto 활용 연습 (0) | 2022.03.26 |
---|---|
[Git, Github] 체리픽 Cherry-Pick 활용 연습 (0) | 2022.03.26 |