:ledger: 프로젝트 협업 시 git branch를 문제없이 사용하는 방법을 알아보자..

스파르타 부트캠프에 오고나서 git을 정말 많이 사용해본 것 같다. 그런데, pull과 merge, 그리고 push하는 과정에서 정말 쉽게 생각했는데 최종 프로젝트에서 그동안 잘못 알고 있었다는 것을 깨닫고 글을 작성하게 되었다.

:one: 개요

이전 프로젝트에서의 나의 작업 순서는 아래와 같았다.

  1. 프로젝트 세팅
  2. clone 받은 후 branch 생성
  3. add, commit, push, pr

사실 이 3번까지의 과정은 처음 작업할 때 크게 문제가 되지 않았다. 문제가 되었던 것은 다른 작업자가 나보다 먼저 pr을 올린 후 merge하는 부분과 위와 같이 작업 후 다른 기능을 작업하기 위해 사용하던 브랜치에서 새로운 브랜치를 만들어 작업을 진행했던 것.

:two: 문제

문제를 설명하자면 아래와 같다.

:pushpin: 2-1) 로컬, 원격 dev 동기화

다른 사람이 먼저 작업 후 dev에 merge하고 나의 작업을 PR하기 전 merge되어 있는 merge해야할 때 (동기화 작업)

  • 이 때 원래 항상 git pull origin dev를 사용했는데, 문제가 되었던 건 내 현재 브랜치에서 pull을 받기 때문에 나의 로컬 dev는 원격 dev와 동기화가 되지 않는다는 것이다. 그렇기에 이후에 브랜치를 생성할 때 마다 원격의 dev에 pull을 했었으며, 중간 과정에서 충돌도 정말 많이 경험했다.

:pushpin: 2-1) 추가 작업 브랜치 생성

두 번째는 새로운 브랜치를 생성하는 과정에서 문제가 되었다. A브랜치 작업이 끝난 후 B브랜치를 생성하고 B의 내용을 push하게 되면, B브랜치를 작업할 때 A브랜치의 작업 또한 B브랜치에 반영이 되며, push할 경우 A브랜치 커밋도 함께 올라가져서 작업 단위로 branch를 나눈 이유가 사라져 버린다.

:three: 해결방법

:pushpin: 3-1) 로컬, 원격 dev 동기화

작업 순서에서 추가가 되면 된다.

  1. 프로젝트 세팅
  2. clone 받은 후 branch 생성
  3. add, commit
  4. 다른작업자가 pr, dev merge 하면 현재 나의 branch에서 dev branch로 이동한다.
  5. 이후 git pull origin dev해서 원격,로컬 dev를 동기화해준다.
  6. 다시 나의 작업 브랜치로 이동한 후 git merge dev를 해주어 현재 브랜치에 dev의 내용을 동기화해준다.
  7. 이 시점에서 충돌이 있을 경우 해결해주고 push, pr을 진행한다.

위와 같이 진행하게 되면, 다른 작업자의 최신 작업 내용 또한 잘 동기화되어 이후 충돌이 많이 없어진다.

:pushpin: 3-2) 추가 작업 브랜치 생성

이 부분은 그래도 생각보다 간단하다. 만약 내가 A의 브랜치의 작업이 끝날 경우, dev 브랜치로 이동 후 dev 브랜치에서 다시 B브랜치(새로운 브랜치)를 생성하고 해당 브랜치로 이동해서 작업을 진행하면 된다.

  1. A브랜치 add,commit,push,pr
  2. dev 브랜치 이동
  3. 원격, 로컬 동기화
  4. 새로운 기능 브랜치 생성
  5. 새로운 브랜치로 이동 후 작업

이렇게 작업을 진행하게 되면 각 브랜치의 commit 내용이 들어가져있고, 어떤 기능의 브랜치인지 헷갈리지 않을 수 있다.

:fire: 마무리

현재까지의 경험으로 글을 정리해보았는데, 정답이 아닐 수 있다고 생각한다. 이후의 더 경험을 하면서 좋은 방법이 있거나 나의 방법이 틀릴 경우 다시 수정해보도록 해야겠다.