Git은 브랜치별로 소스를 관리하기 편하다.
개발하려는 기능을 새로운 브랜치를 만들어 작업한 후, 작업이 완료되면 master로 통합해주는 방식으로 많이 활용된다.
아래는 쉘에서 사용 가능한 브랜치 관련 git 명령어들이다.
1. 브랜치 생성
git branch 명령으로, test라는 브랜치를 만든다
$ git branch test
2. 브랜치 이동
git checkout 명령으로 test라는 브랜치로 이동한다.
$ git checkout test
3. 브랜치 이름 변경
로컬 저장소의 브랜치 이름 변경
$ git branch -m [old_branch] [new_branch]
test라는 브랜치의 이름을, new_test로 변경하는 예는 다음과 같다.
(브랜치 명령어는 브랜치만 생성하기 때문에, 작업을 하려면 checkout을 해야 한다.)
$ git branch -m test new_test
$ git checkout new_test
원격 저장소의 브랜치 이름 변경
원격 저장소의 old_branch를 삭제하고, new_branch를 push 해주면 된다. 아래의 명령어로 한번에 할 수 있다.
$ git push origin :[old_branch] [new_branch]
원격 저장소의 test라는 브랜치를 new_test라는 브랜치명으로 바꾸는 예는 다음과 같다.
$ git push origin :test new_test
4. 브랜치 합치기
두 브랜치를 합치는 방법으로는, Merge와 Rebase가 있다.
양자는 최종 결과물은 같고, 커밋 히스토리만 다르다.
Rebase 는 브랜치의 변경사항을 순서대로 다른 브랜치에 적용하면서 합치고,
Merge는 두 브랜치의 최종 결과만을 가지고 합친다.
브랜치 Merge
git merge 명령으로, test 브랜치를 master 브랜치에 합친다.
$ git checkout master
$ git merge test
브랜치 Rebase
rebase를 통해 test 브랜치를 master에 합치는 예는 다음과 같다.
$ git checkout test
$ git rebase master
$ git checkout master
$ git merge test
Rebase시 주의!
이미 공개 저장소에 Push한 커밋을 Rebase 해서 다시 push 하지 마라.
Rebase는 기존의 커밋을 그대로 사용하는 것이 아니라 내용은 같지만 다른 커밋을 새로 만든다.
따라서 이미 공개 저장소에 c1이라는 커밋을 push 해서 다른 사람이 그 커밋을 바탕으로 작업을 했는데, 해당 커밋 c1을 rebase로 다시 push 해버리면, 동료는 rebase 내용을 pull 했을 때 본인의 코드와 충돌이 일어나게 된다.
그래서인지, rebase는 로컬작업에서만 사용하라고 권장하는 사람들도 있다.
합친 브랜치 master를 원격 저장소에 push하기
$ git push origin master
5. 브랜치 삭제
merge 후 필요 없어진 브랜치는 삭제한다.
$ git branch -d [branch_name]
아래는 test라는 브랜치를 삭제하는 예이다.
$ git branch -d test