merge vs rebase
merge와 rebase 모두 브랜치를 합치는 명령어지만 약간의 차이가 있다.
merge는 아래 사진과 같이 깃의 커밋들의 로그가 두 브랜치가 합쳐지는 형태로 남는다
rebase는 merge처럼 합쳐지는 형태로 기록이 남지 않고 합쳐질 브랜치가 앞에 붙는 형식으로 선형적으로 남는다.
rebase는 로그가 선형적으로 남아 기록이 더 깔끔하게 남을 수 있지만, 없어지는 커밋이 생길 수도 있다. 반면에 merge는 로그가 합쳐지는 두 가지 갈래 형태로 남아 깔끔하진 않을 수 있지만 모든 커밋이 보존된다.
merge
merge를 할 때 우선 남아야 하는 브랜치로 이동한 후에 merge를 해야 한다.
git checkout [남아야할 브랜치 이름]
git merge [합칠 브랜치 이름]
rebase
rebase는 merge와 다르게 합쳐질 브랜치로 이동을 하고 남을 브랜치로 rebase 한다.
git checkout [합쳐질 브랜치 이름]
git rebase [남을 브랜치 이름]
그런데 위의 명령어만 입력하면 위의 그림처럼 master에 experiment를 합쳤지만 master가 experiment보다 뒤에 있다.
그렇기 때문에 이 두 브랜치를 한번 더 합쳐줘야 같은 커밋을 가리킨다.
git checkout [남을 브랜치 이름]
git merge [합쳐질 브랜치 이름]
rebase 옵션
B와 C의 공통된 부분을 없애고, C를 A에 붙힘
git rebase --onto A B C
Conflict(충돌)
두 브랜치를 합칠 때 같은 파일의 같은 부분을 두 브랜치에서 모두 수정하고 머지하면 발생한다.
이는 컴퓨터가 두 브랜치중 어떤 브랜치의 수정사항을 받아들일지 결정할 수 없기 때문에 발생한다고 이해하면 된다.
충돌이 발생했을 경우, 두 브랜치중 어떤 브랜치의 내용을 선택할지 에디터에서 수정을 해주고 커밋을 다시 하면 해결할 수 있다.
'git' 카테고리의 다른 글
[git] git이란? (0) | 2021.10.13 |
---|---|
[git] pull vs fetch (0) | 2021.10.13 |
[git] branch (0) | 2021.10.13 |
[git] add, commit (0) | 2021.10.13 |