1. Git Branch란?
Git에는 개발 작업을 분리시켜 병렬적인 개발을 지원하는 기능인 branch
가 있습니다. 기존 코드에 새로운 branch를 생성하여 원래 하던 작업과 완전히 독립적인 개발을 할 수 있습니다.
또한, 각 branch는 고유의 commit history
를 가지고 있어 작업의 flow를 분리할 수 있습니다.
2. branch 생성
git branch 브랜치이름
위와 같이 터미널에 git branch new
를 입력하여 새로운 new 브랜치를 생성했습니다.
3. branch 전환(checkout)
git checkout 브랜치이름
생성한 new 브랜치로 이동하기 위해 checkout
명령을 사용했습니다.
new 브랜치로 전환한 상태에서 파일 a, b를 수정하여 이를 commit 하면 git history는 다음과 같이 변합니다.
4. branch 병합(merge) 및 충돌(conflict)
git merge 브랜치이름
생성한 new 브랜치에서 개발을 완료하고 이를 다시 master 브랜치에 합치려면 병합(merge)을
해야 합니다. merge를 하기 위해 우선 병합의 기준이 되는 브랜치로 이동해야 합니다.
이동 후 git merge new
를 사용하여 병합을 시도했습니다.
하지만 뭔가 문제가 생겼습니다. master브랜치의 commit1과 new브랜치의 commit2는 동일한 파일의 동일한 부분을 수정했기 때문에 충돌(conflict)
이 발생한 것입니다.
공통된 부분을 개발하면서 발생한 충돌을 해결하기 위해선 개발자가 직접 충돌이 발생한 파일의 부분을 변경해야 합니다.
병합하기 위해 충돌된 파일을 새로운 내용으로 작성하고 git commit -am “커밋 메시지”
명령을 통해 merge를 완료했습니다.
마지막으로 병합이 완료된 new 브랜치를 제거하여 개발을 완료했습니다.
git branch -D 브랜치이름
5. Rebase
Rebase
는 브랜치의 분기점이 되는 commit의 위치를 변경하는 작업입니다. 주로 commit history를 깔끔하게 정리하거나 브랜치를 최신 상태로 유지하기 위해 사용합니다.
commit history에는 master
, feature1
이란 브랜치가 있고 두 브랜치는 second commit
을 기준으로 분기했습니다. 이후 각 브랜치에는 여러 commit이 적용된 상태입니다.
이때 rebase를 사용하면 master에 적용된 변경사항을 feature1에도 적용하고 분기된 history를 깔끔하게 정리할 수 있습니다.
git rebase 반영할 브랜치
git add .
git rebase --continue
master에 적용된 변경사항인 commit1, commit2, commit3을 feature1의 commit4, commit5에도 적용시키는 과정을 수행했고, 그 결과로 아래와 같이 두 브랜치의 분기점이 commit3
으로 바뀐 것을 볼 수 있습니다.