📢 어렵고 정석적인 개념 설명보다는 저같은 초보자도 이해하기 쉽게 정리하는 것을 원칙으로 포스팅하고 있습니다. 😄
개념
전 글에서 브랜치를 생성하고 삭제하고 이동하는 방법에 대해서 배워봤다. 브랜치를 쓰기 전에, 먼저 우리가 왜 브랜치를 쓰는지 알아야 한다.
다른 팀원들과 한 프로젝트를 같이 협업하기 위해서, 혹은 개인 프로젝트인데 다른 버전으로 테스트를 해보기 위해서 등이 그 이유가 될 것이다. 브랜치를 만드는 건 알았으니, 이제 브랜치 안에서 만든 코드(커밋)들을 메인 브랜치로 옮기는 방법에 대해서도 알아야 한다.
방법
merge로 병합하기
git switch main // 메인 브랜치로 먼저 이동
git merge (브랜치 이름) // 특정 브랜치를 메인 브랜치로 병합
git branch -d (브랜치 이름) // 병합한 후 특정 브랜치 삭제
merge의 기준은 main 브랜치이다. 즉, 우리가 merge를 통해 합칠 때는 무조건 main 브랜치로 이동해야 한다.
(main == master) 이동한 후에 main에 병합하고 싶은 브랜치 이름을 뒤에 넣어주면 된다. 그리고, 병합된 브랜치는 이제 더 이상 쓸 필요가 없으니 브랜치 삭제 명령어를 통해 삭제해준다.
rebase로 병합하기
git switch (브랜치 이름) // 병합될 브랜치로 이동
git rebase main(master) // main(master)로 병합
git merge (브랜치 이름) // 뒤쳐진 main 브랜치를 앞으로 병합
rebase는 merge와 달리 main이 기준이 아니다. 그렇기에 병합될 브랜치로 먼저 이동해야 한다. 그 이후 rebase 명령어를 통해 main으로 병합되면 된다.
merge는 여러 개의 줄기에서 하나의 줄기로 병합되는 반면, rebase는 여러 개의 줄기 중 특정 줄기를 똑! 떼서 main 줄기에다가 붙이는 작업이기 때문에 main 줄기 입장에서는 갑자기 생긴 줄기에 '읭?'하는 반응이 나올 수 있다.
실제로 '소스트리'를 통해 확인해보면, main 브랜치보다 특정 브랜치가 앞서 있는 것을 확인해볼 수 있을 것이다. 이를 해결하기 위해서 merge로 한 번 더 병합이 필요하다. 여기서 merge는 특정 브랜치를 삭제해주는 기능도 한다.
병합시 충돌 해결하기
git status // 충돌 상황 확인하기
git merge --abort // 병합 잠시 멈춤
git rebase --abort
git rebase --continue
git add . // 해결한 후 다시 병합하기
git commit
항상 하나의 가지에서 뻗어난 것들이 다시 하나로 합쳐질 때는 '충돌'이 일어나기 마련이다.
Git도 마찬가지다. 서로 각자의 브랜치에서 새로운 코드 추가를 하다가도 메인 브랜치에 있었던 코드를 수정하는 순간
각자의 브랜치를 합칠 때 충돌은 발생한다. 충돌이 발생했을 때의 해결법은 간단하다. --abort로 잠시 병합을 멈춘 뒤, 충돌을 일으킨 코드를 직접 수정해주면 되는 것이다.
비교
브랜치 병합 방법인 merge와 rebase는 비슷하기에 더욱 헷갈릴 수 있다.
merge는 여러 개의 줄기가 하나의 줄기로 합쳐지는 방법이라고 생각하면 되고, rebase는 여러 개의 줄기 중에 특정 줄기를 떼서 가장 큰 줄기에 붙이는 방법이라고 생각하면 된다. 대신, rebase의 경우 원래 줄기에서 특정 줄기만큼 떼다 붙였기 때문에 하나의 줄기로 합쳐주는 과정이 필요하다. 그 때 merge로 붙이면 된다.
(merge는 rebase와 달리 브랜치에서 작업한 히스토리를 남기기 때문에, 협업시에는 merge를 통해 병합하는 게 낫다.)
'Git' 카테고리의 다른 글
[Git] GitHub로 협력 시 커밋 관리하기 (push, pull) (0) | 2022.03.29 |
---|---|
[Git] GitHub로 프로젝트 올리고 받는 방법 (0) | 2022.03.29 |
[Git] 또 다른 차원, 브랜치(Branch) 만들고 이동하기 (0) | 2022.03.22 |
[Git] Git의 commit을 기준으로 과거로 돌아가기 (0) | 2022.03.22 |
[Git] Git으로 프로젝트 관리하기 (add, commit) (0) | 2022.03.22 |