이번시간에는 rebase
에 대해 알아보겠습니다.
이와 대조되는 기능은 merge
입니다.
rebase
도 병합을 하는 방법이지만 merge
와는 결과가 좀 다릅니다.
일단 merge
부터 알아봅시다.
일단 처음에 Master
이라는 branch
가 있다고 가정해봅시다.
Master
에서 commit
을 한번 한 후에 feature
라는 branch
를 새로 만들었습니다.
faeture
에서 새로운 커밋을 생성했습니다.
한번더 feature
에서 커밋을 생성했습니다.
이후 master
에서 커밋을 2번했습니다. 이때 Merge
를 통해 Master
의 내용을 feature
로 가져오고 싶으면 어떻게 해야할까요? Git branch feature
를 하고 Git merge master
를 하면 됩니다.
Feature
와 master
의 최신 commit
이 공통의 조상으로 하는 새로운 commit
이 만들어집니다. 이는 3 way merge
를 통해 자동으로 병합해주고 불가능할 경우에은 conflict
가 발생해서 사람이 고치도록 합니다 , 그리고 feature
는 master
의 모든 커밋을 담고있습니다.
Rebase
에 대해 이제 알아보겠습니다. Base
는 feture
입장에서 base
는 빨간 원을 의미합니다. 왜냐하면 feature
에서 파생된 지점이 master
인데 , feature
와 master
가 같은 공통조상이기 떄문입니다. rebase
는 base
를 바꾼다는 것인데 , feature
에서 파생된 master
의 최신 commit
으로 feature
로 바꾼다는 듯입니다.
Git checkout feature
, Git rebase master
라고 해주면 임시저장소가 만들어 지고 feature
가 만들어놓은 개의 commit
이 임시저장소로 저장되고 feature
는 master
의 최신 commit
으로 checkout
됩니다. 이후 feature
의 commit
이 사라집니다. 그리고 임시저장된 commit
들은 master
의 최신 commit
과 병합을 시킵니다.
임시저장소에있는 내용을 master
와 병합한 후에 feature
를 가장 최신으로 이동해줍니다. 이것이 rebase
입니다.
Merge
와 공통점은 feature
는 결과적으로 같은 커밋을 가지고 있습니다. 왜냐하면 자기가 작업한 내용과 master
가 작업한 내용을 모두 가지고 있기 때문입니다.
차이점은 merge
같은 경우는 히스토리가 병렬로 나아가서 보기 어렵지만 Rebase
는 일렬로 히스토리가 나아가기 때문에 보기 편합니다.
단점은 rebase
는 어렵고 위험하기 때문에 조심해야합니다. Merge
는 rebase
에 비해 조금 더 쉽고 더 안정적입니다.
지금까지 merge
와 rebase
에 대해 알아보았고 그 차이점에 알아보겠습니다.
다음에는 실습을 해보겠습니다.
여기까지 하도록 하겠습니다.