git 정리 1편에서는 git의 개념 그리고 사용하는 이유에 대해서 알아보았고 간단한 기본 명령어에 대해서 정리하였다. 이번 글에서는 git에 Branch라는 개념과 활용에 대해서 학습하였다.
Branch는 '가지'라는 뜻을 가지고 있다. 실제 git에서도 '가지'라는 의미로 역할이 있으며 언제, 왜 사용되는지부터 정리해 보자.
혼자서 프로젝트를 진행할 때 git으로 형상 관리를 한 경험이 있다. 이 때는 Branch에 대한 개념이 부족하였지만 프로젝트를 진행하는데에 문제가 없었다.
하지만 협업에서 git을 사용한다면 여러 문제를 만날 수 있는데 이를 Branch를 통해 보다 쉽게 개발을 할 수 있게 된다. 예시를 들어서 설명을 해 보겠다.
프로젝트를 여러 모습으로 관리해야 할 때
프로젝트를 실제 운용하는 코드, 새로운 서비스를 개발하는 코드, 테스트 코드가 존재한다고 할 때 하나의 Branch에서 관리한다고 생각하면 생각만해도 복잡할 것이다. 이 때 각 케이스마다 Branch를 할당한다면 쉽게 해결할 수 있다.
여러 작업들이 각각 독립되어 진행될 때
프로젝트를 진행하면서 서비스 A와 서비스 B가 동시에 개발 중이라는 상황을 가정하자. 이 때 하나의 Branch에서 작업을 한다면 서비스 A와 서비스 B가 모두 완료될 때에 실배포를 하던지 테스트를 할 수 있다. 이 때 각 서비스 개발을 새로운 Branch에 할당한다면 각 서비스를 독립적으로 테스트 후 실제 운용하는 Branch에 병합할 수 있는 장점이 있다.
Branch 생성 명령어는 git branch "이름" 이다. 그리고 Branch 목록을 보는 명령어는 git branch이다. git branch 명령어 실행시 초록색 글자로 되어있는 Branch가 현재 Branch이다.
Branch 이동 명령어는 git switch "이름" 이다. 명령어 실행 후 CLI에 제일 오른쪽에 (main) -> (add-coach)로 바뀐 모습을 확인할 수 있다.
Branch를 생성과 동시에 이동하는 명령어는 git switch -c "이름" 이다. new-teams라는 branch를 만듬과 동시에 이동하는 모습을 확인할 수 있다.
Branch 삭제 명령어는 git branch -d "이름" 이다. 'delete'라는 branch를 생성한 후에 다시 삭제하면서 변하는 목록을 확인할 수 있다.
branch 이름 수정 명령어는 git branch -m "이름" "수정이름" 이다. branch의 이름이 add-coach -> plus-coach 으로 변경될 것을 확인할 수 있다.
이렇게 Branch가 여러 갈래로 나뉘어졌을 때 git log 명령어의 결과는 현재 Branch 로그만 출력한다. 그래서 Branch가 많을 경우 로그를 확인하는데 불편할 수 있다.
그래서 이를 해결하기 위해 전체 로그를 가져오는 명령어가 있다. 바로 git log --all --decorate --oneline --graph 이다.
위에 배운 내용대로 각 Branch 마다 개발을 독립적으로 진행 중 이었고 완료되었다. 그렇다면 이제 main Branch에 병합을 해야하는데 그 방법을 알아보자.
첫 번째 방법은 merge이다. merge는 Branch 사용내역을 남길 필요가 있을 때 적합한 방식이다.
명령어는 git merge (target Branch) 이다.
여기서 주의할 점은 base Branch로 이동한 후에 명령어를 실행해야 한다. 또한 merge는 또 하나의 commit이기 때문에 reset이 가능하다.
meger를 하였을 때 서로 같은 코드를 수정하여 충돌이 발생하는 경우가 있다. 이러한 경우에는 알맞은 코드로 직접 수정하고 git add, git commit 명령어를 실행하거나 git merge --abort 명령어를 실행해 취소를 할 수 있다.
두 번째 방법은 rebase이다. rebase는 한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합하다. 명령어는 git rebase (base Branch) 이다.
merge와 다른점으로는 target Branch로 이동한 후에 명령어를 실행해야 한다. 그리고 명령어 후에 뒤처진 base Branch를 target Branch로 옮겨야 하기 때문에 git merge (target Branch)을 실행해야 한다.
rebase를 하였을 때 서로 같은 코드를 수정하여 충돌이 발생하는 경우가 있다. 이러한 경우에는 알맞은 코드로 직접 수정하고 git add, git rebase --continue 명령어를 실행하거나 git rebase --abort 명령어를 실행해 취소를 할 수 있다.
참고 문서 및 링크