이 사이트의 문제를 풀었는데, 정리해볼겸 블로그에 적어보고자 한다.
문제설명
음, 여기 꽤 여러개의 브랜치가 있습니다! 이 브랜치들의 모든 작업내역을 main 브랜치에 리베이스 해볼까요?
윗선에서 일을 복잡하게 만드네요 -- 그 분들이 이 모든 커밋들을 순서에 맞게 정렬하라고 합니다. 그럼 결국 우리의 최종 목표 트리는 제일 아래에 C7' 커밋, 그 위에 C6' 커밋, 또 그 위에 순서대로 보여합니다.
before:
after:
before를 after로 만들어야 한다.
이 문제에서는 rebase를 사용해서 풀어야하기때문에 cherry-pick은 사용할 수 없다.
git rebase A B
위의 명령을 해석해 보면 A와 B 브랜치의 공통 조상 커밋부터 B 브랜치까지의 모든 커밋의 base를 A 브랜치의 위치로 바꾸라는 것이다.
커밋의 베이스를 다시 정하는 명령으로 이해하면 좋을것 같다.
그럼 실제로 어떤식으로 명령을 할 수 있냐면
git rebase main bugFix
이 명령을 하게되면
이렇게 bugFix와 main의 공통 조상 커밋인 c1이후부터의 bugFix브랜치의 모든 커밋이 main을 base로 하게 되는것이다.
그럼
git rebase bugFix side
를 실행하게 되면
이렇게 된다.
bugFix와 side의 공통의 조상이었던 C0이후부터 side 브랜치의 모든 커밋을 bugFix를 base로 하게 변경한 것이다.
git rebase side another
그리고 이 코드를 실행하면 side 브랜치와 another 브랜치의 공통 조상인 C5 이후의 another 브랜치의 커밋을 side 아래로 가져오게 된다.
git rebase another main
이 명령을 실행하면 main브랜치의 base를 another로 설정하게 되므로 main과 another브랜치는 같은 커밋을 가리키게 되는것이다!