개발 노트

Git 협업 - 브랜치

juwon2 2024. 3. 8. 16:35

# 브랜치란??

- 쉽게 말해서 브랜치 = 복사본이다

 

예를들어, 장바구니 기능을 만들기로했는데 장바구니 기능이 꽤 오래걸릴것같고 만들다가 에러가 많이 날것같다고 해보자

그럼 차라리 복사본을 만들어서 기존코드에 영향을 주지 않는게 더 좋을것이다!

이를 위해서 코드의 복사본 = 브랜치를 만드는 것이다

 

 

# 브랜치 생성 명령어

 

- git branch 브랜치 이름

-> 이렇게만 쓰면 아무런 반응이 없는데, 브랜치가 잘 생성됐는지 확인하기 위해서 git branch라는 명령어를 입력해준다

 

 

- git branch

 

->  이렇게 쓰면 내가 원래 가지고있던 브랜치(main)내가 만든 브랜치(login)가 표시가 되어있는걸 볼수있다 

-> *표시가 붙은 브랜치가 내가 현재 위치해있는 브랜치라는 뜻이다

 

 

 

 

# 브랜치 이동 명령어

-> 브랜치를 만들었으니깐 해당 브랜치로 이동해서 수정을 해야될것이다

 

- git swich 브랜치 이름    or    git checkout 브랜치 이름

 

-> Switched to branch "login" 이라고 뜨면서, login브랜치로 이동한것을 볼수있다

이는 기존의 main브랜치에 있던 코드를 그대로 복사해서, 새로운곳에서 코드를 짤수있다는 뜻

 

다시 git branch를 쳐서 현재 내위치를 확인해보면, 현재 내가 위치해있는 브랜치가 login인것을 확인할수있다

 

 

 

# 브랜치 한번에 생성&이동

-> 아까는 브랜치 생성,이동을 따로했지만, 브랜치를 한번에 생성하면서 이동하는 코드도 있다

 

git switch -c 브랜치 이름    or    git checkout -b 브랜치 이름

 

 

(이제 login브랜치에서 코드수정하고 add, commit한뒤, 기존위 main브랜치로 이동하고

login브랜치와 main브랜치를 비교해보면, login 브랜치엔 수정한 코드가 있지만 main 브랜치에는 수정한 코드가 없는걸 알수있다!! 당연!!

즉, 원본은 변경하지 않고, login브랜치에서만 코드를 변경한것이다)

 

 

 

# 코드 합치기

이제 내가 login브랜치에서 짠걸 main브랜치에다가 합칠것이다

 

코드를 합치는 이유는??

-> 같이 협업하는거기 때문에 기능들을 다 만들고 어쨌든 최종 브랜치에 합쳐야함

 

git merge 합칠 브랜치 이름

-> 일단 먼저 최종브랜치에서 합쳐야되니깐 최종브랜치(main브랜치)로 이동한뒤에,  merge하는데 login브랜치를 땡겨와서 합친다

 

-> git switch main 을 써서 main으로 이동한뒤에, git merge login을 사용해서 main에 login브랜치를 합친다

 

 

 

 

# Pull Request

-> 방금 git merge를 배웠지만, 실제 협업시에는 git merge명령어로 합치는 경우는 거의 없다

 

보통 github에서 합친다!! 그 이유는 merge전에 코드리뷰가 가능하기 때문이다

코드를 합치기 전, 팀원 간 코드에 문제가 없는지 확인하고 서로의 코드에 대해 리뷰를 해줄수있다. 그외 충돌여부확인,테스트 자동화 등 다양한 이점들이 있다

 

일단 github에서 코드를 merge하기(합치기)위해선 pull request를 생성해야한다

pull request는 코드를 "기본 브랜치(main)로 당겨와 합치는것을 요청한다" 라는 뜻이다 

쉽게말해서, 코드를 합쳐도 되는지 팀원들한테 물어보는것이다

 

 

# pull request 활용하기

1. 브랜치 생성 및 브랜치 이동 (git switch -c 브랜치명)

2. 해당 브랜치에서 코드 수정 

3. 수정한 코드 저장 ( git add.  / git commit -m "커밋 메시지" )

4. 깃허브에 코드 업로드 (git push origin 브랜치명)

 

5. 깃허브에서 Compare & pull request 버튼 클릭 

 

+) 만약에  Compare & pull request 버튼이 안생겼다면?

-> Pull request 탭 클릭후, New pull request 누르기

 

 

6. Create pull request 클릭

(기능브랜치 = 합쳐질 브랜치)

 

7. pull request 생성 결과 화면

(Files changed에서 코드리뷰 가능)      코드리뷰하는 법 -> https://coding-juuwon2.tistory.com/232

 

 

 

8. merge하기

-> Merge pull request 버튼 클릭

 

 

-> Confirm merge 버튼 클릭

 

-> merge 완료 화면 (깃허브에 있는 최종브랜치(main)에 합쳐진것, 내 컴퓨터에선 아직 합쳐지지 않음)

 

 

9. git pull 명령어로 깃허브의 코드내 컴퓨터의 코드를 똑같이 맞추기

-> 깃허브에서 pull request로 합치면, 깃허브에만 브랜치가 합쳐져있는거고

내 컴퓨터에서는 아직 합쳐져있지 않기 때문에, git pull 명령어를 사용해서, 내 컴퓨터에도 깃허브의 코드와 똑같이 맞춰줘야함 (그러면 내컴퓨터에도 merge적용됨)

 

먼저 내 컴퓨터에서 기본브랜치(main) 으로 이동

 

git pull을 사용해서 깃허브의 코드와 내 컴퓨터의 코드를 똑같이 맞추기

 

 

 

 

 

 

 

# 협업 실전 시

- 이제 기본적인 git, github 사용법을 모두 학습했다!!

근데 이방법으로 실전협업시 문제가 발생할 수 있다

[ main브랜치(배포용 브랜치)로 merge했는데 에러가 터질수 있음 / 완벽하게 기능이 개발된 후에야 merge할수있는 문제 /

버그가 어디서 발생했는지 찾기 힘든문제 ]

 

 

- 해결책

해결책 1.  main브랜치기능브랜치 사이에, 테스트용인 "개발용 브랜치"를 추가로 만들기!!

-> 기능브랜치에서 기능개발하고 main브랜치에서 바로 합치지 말고, develop브랜치에서 합쳐서 에러가 안나는지 확인한뒤 에러 안나면 main브랜치에 합치기

-> 작은 단위단위로 개발하고 합칠 수 있음 (회원가입기능 -> merge , 로그인 기능 -> merge...)

[main브랜치(배포용)  develop브랜치(테스트용)  기능브랜치(기능개발용)]

 

해결책2. merge 전 내 로컬의 기능브랜치(ex. feature/signup)에서 먼저합쳐서 테스트하기!!  (git pull origin develop 사용)

-> 깃허브에 merge 후 테스트를 하면, 예상치못한 에러발생할 수 있기 때문에, 내 로컬의 기능브랜치에서 먼저 테스트

-> 합쳐진 코드에 에러가 있다는것을 인지하지 못한 다른 팀원들이 코드를 내려받아, 기능을 개발할수도있는 문제 해결하기 위해 

 

 

 

 

# 실전 협업 단계별 설명 

1. 협업 초기세팅 

# 팀장

1)  폴더 생성 후 초기코드 작성

2)  git init, add, commit (코드 저장)

3)  깃허브 레퍼지토리 생성

4)  깃허브 업로드 (git push)

5)  dev (혹은 develop ) 브랜치 생성  (git switch -c dev)

6)  깃허브에 dev 브랜치 업로드 (git push origin dev)

7)  dev 브랜치를 기본브랜치로 변경

  • Settings -> Defalt Branch에서 화살표버튼 클릭

 

  • dev로 변경 후 update 클릭

 

  • Code 탭의 기본 브랜치 확인 

 

 

8) 팀원들을 collaborator로 등록 

 

9) 팀원들은 git clone하기

 

 

2. 기능개발 

 

10) 기능 브랜치 생성

git switch -c 기능브랜치명

 

11) 기능 코드 작성 및 git add, git commit, git push (저장과 깃허브업로드)

 

12) 깃허브에서 Pull request 만들어서 합치기 (깃허브에만 합친코드 반영, 내 로컬 컴퓨터에는 반영X)

 

13) 코드리뷰 요청코드리뷰

 

14) 내 로컬에서 dev 브랜치 코드를 pull해서 가져오기 (git pull origin dev) (내로컬에서 먼저 테스트해보기 위해)

(리뷰요청전에 해도 상관없음)

 

15) 코드실행 후 문제 없는지 확인 (충돌 발생시에는 해결하기)

 

16) 문제 없으면 git add, git commit, git push 

 

17) 깃허브에서 merge하기 (Merge pull request 클릭 -> Confirm merge 클릭)

 

 

3. 추가 기능 또 개발한뒤

 

- dev 브랜치로 이동 (git switch dev 혹은 git checkout dev)

- 깃허브 코드 가져오기 (git pull origin dev)

- 기능 브랜치 생성 (git switch -c 기능브랜치명)

- 코드작성 및 git add, commit, push

- 깃허브에서 Pull request 만들어서 합치기

- 코드리뷰 요청 및 코드리뷰 

- 내 로컬에서 브랜치코드를 pull해서 가져오기 (git pull origin 기능브랜치명)

- 코드 실행 후 문제 없는지 확인 (충돌 발생시엔 해결)

- 문제 없으면 git add, git commit, git push

- 깃허브에서 merge  (Merge pull request 클릭 -> Confirm merge 클릭)

 

< 이후에도 추가기능 개발할때 이 기능 계속 반복!!! >