Lina's Toolbox

Git & Github 으로 협업하는 법 / git branch, git merge, git pull request 본문

스파르타 내일 배움 캠프 AI 웹개발 과정/git

Git & Github 으로 협업하는 법 / git branch, git merge, git pull request

Woolina 2024. 7. 4. 13:13

1. Branch 활용하기

브랜치 == 복사본 

비슷한 개념임


브랜치(복사본) 생성 명령어

git branch 브랜치이름 (엔터)

 

를 치면 브랜치 하나가 생성 된 것!!

그러나 화면 상으로는 아무 반응이 없다.


브랜치 확인 명령어

git branch

를 입력해보자.

내가 만든 브랜치를 확인하는 명령어이다.

 

초록색현재 내가 있는 브랜치를 의미한다. 하얀색은 내가 있는 브랜치가 아님.

여기서는 입력이 안되는데, 키보드 q 로 빠져 나가면 된다.


브랜치 이동 명령어

git switch 브랜치이름

 

혹은

git checkout 브랜치이름

 

차이라고 한다면 switch가 더 최신에 만들어진 명령어. 아무거나 써도 된다.


브런치 생성 & 이동 한번에 하는 명령어

git switch -c login

참고로 c는 create의 약자임

 

혹은

git checkout -b 브랜치이름

b는 브랜치를 의미

 

둘 다 브런치를 만들면서 만든 브랜치로 이동함


새로운 브랜치에서 코드 수정

 

git add
git commit -m "커밋 메세지"

새로운 브랜치에서 수정된 코드 저장


 

브랜치 이동하여 비교하기

git switch 브랜치이름

(혹은)

git checkout 브랜치이름

 

=> login 브랜치에서 수정한 내용은 main 브랜치에는 반영되지 않은 것 확인!

(main 브랜치에는 수정 전 코드가 남아있음)

 

=> 각 브랜치들은 서로 영향x, 독립적으로 동작함.


코드 짠 브랜치를 main에 합치기

main에 합치는 이유: main이 최종 브랜치므로, main에서 다른 사람들도 작업 중이기 때문

 

브랜치 합치는 명령어

git switch 최종브랜치이름

git merge 합칠브랜치이름

따라서 여기서는 git switch main, git merge login 이 될 것

 

반드시 최종브랜치(수정된 코드를 당겨올 브랜치)로 먼저 이동한 후 merge 명령어를 입력해야 한다.


사실 git merge는 실무에서 잘 사용하지 않는다.

보통 터미널에서 이렇게 입력하지 않고, Github에서 직접 합치는 편이다.

(온라인에 올린 후 깃허브에서 나중에 합침) 

=> 왜? 여러 가지 이유가 있지만, 보통 코드 리뷰를 위함

 


2. Pull Request 활용하기

Pull Request란?

당겨서(pull) 합쳐도(merge) 되는 지 물어보는(Request) 것. (나와 협업하는 사람들에게)

 

새로운 브랜치(login branch)에서 수정후 add commit 까지 한 상태에서

 

Github에 업로드

git push origin 브랜치명

git push origin login

 

Github로 이동 해보면 노란색 알람이 떠 있다.

Compare & pull request 클릭

 

최종 브랜치: 합쳐질 브랜치

기능 브랜치: 우리가 코드를 수정한 브랜치

 

메시지 작성 한 후 Create pull request 하면 pull request가 생성됨!!

 

 

코드리뷰 하려면 Files changed 를 보면됨.

Merge pull request 버튼을 누르면 git merge 명령어 같은 효과!!! Merge가 됨

 

Comfirm merge 눌러주고 다음과 같은 창이 뜨면 합쳐진 것!

합쳐진 코드 확인.


내 로컬에도 반영

지금까지는 Github에서는 변경이 되었지만,

내 컴퓨터(로컬 환경)에서는 합쳐지지 않았다.

 

로컬에서도 합치려면, 단순히 git merge를 치는게 아니라,

 

최종 브랜치(main 브랜치)로 이동한 뒤 (git checkout main) // 이미 해당 브랜치라면 생략

git pull origin main

하면 main 브랜치에 있는 코드를 당겨오는 것

 

 

login 브랜치로 이동해서 main 브랜치 코드를 당겨오는 것도 가능하다.

git checkout login

git pull origin main

 

 


3. 협업 실전 가이드

 

Pull request를 만들고 Github에서 merge 하는 방법도 문제점이 생길 수 있다.

 

문제점 1) main 브랜치 === 배포용 이라는 것이다.

완벽하게 모든 기능을 개발해야 merge를 할 수 있다는 것.

 

완벽하게 기능을 완성하느라 시간도 오래 걸리겠지만,

버그가 발생 시, 어느 부분에서 문제가 생긴 건지 원인을 찾는 데 오래 걸릴 가능성이 높다.

 

=> 따라서 협업을 할 때 더욱 안전한 방법은 다음과 같다.

 

해결책 1) 개발용 브랜치 를 하나 더 만든다.

 

기능 브랜치를 main 브랜치에 바로 합치지 않고, 

짧은 단위로 기능을 만든 후 develop 브랜치로 먼저 합친다.

여러 기능이 합쳐진 후, 배포가 가능해진 시점에야 main 브랜치로 합친다.

=> 즉, develop 브랜치로 중간에 안전장치를 두는 것!

 

문제점2) 그냥 합쳤을 때 위험성이 있다.

예를 들어, 위와 같이

같은 파일에서 다른 줄에 하필이면 같은 변수 이름을 사용했을 때다.

=> 각각 브랜치에서는 문제가 없었어도, 막상 합쳤을 때 문제가 될 수 있다. 

 

해결책) 로컬에서 먼저 테스트

develop에서 merge한 후에

git pull origin dev로 내 로컬에서 먼저 합쳐본 후, 내 컴퓨터에서 테스트한다.

충돌을 발견할 경우 이 때 수정하면 되므로

 

main 브랜치로 냅다 merge하지 말기 !!


실전가이드

먼저 폴더 생성 > 초기 코드 작성 > git init > git add > git commit > git push

과정으로 Github에 업로드 해주었다고 가정!

 

프로젝트의 팀장이 할 일

 

1. dev(혹은 develop) 브랜치를 생성 해준다.

main> git checkout -b dev
dev> git push origin dev

 

git swtch ic dev 혹은 git checkout -b dev로 로컬에서 dev 브랜치를 생성한 후,

git push origin dev로 github에도 반영해준다.

 

 

2. Github에서 dev 브랜치를 default로 설정

Github에서 해당 리파지토리 들어가서 > Settings > Default branch > dev > Update > I understand, update the default branch. 

dev 브랜치를 default로 설정해준다.

 

3. 팀원들을 collaborator로 등록해준다.

Github 레포지토리 -> Settings -> Collaborators -> Add people 

 

 

 

팀원들이 할 일

 

1. git clone 하기

폴더 생성하고 싶은 경로로 이동 후

git clone 리파지토리주소

 

하면 해당 리파지토리 이름의 폴더가 생성된다.

여기가 바로 해당 리파지토리와 연동되는 폴더!

여기에서 파일 생성/ 추가 해주면됨.

 

기능 개발 시작

 

1. branch 생성

git switch -c featcher/signup

 

2. 기능 개발 후 저장, 커밋, 푸쉬

git add .
git commit -m "커밋 메시지"

git push origin 브랜치이름

 

 

3. Pull request 생성

 

4. 다른 사람과 충돌하여 pull request가 안될 경우

 

 

5. 코드 리뷰 하기

 

Reviewers에서 코드 리뷰 요청

 

 

6. 리뷰 요청 받은 사람은: file changed에서 변경된 사항 확인

 

파란 버튼 눌러준다.

 

 

Approve - 승인

Request chages - 변경 요청

Comment - 애매할 때

 

-> Pending 상태 -> Finish your review 눌러서 다시 리뷰 작성함

 

 

7. 합치기 전 내 로컬에서 충돌 해결 및 테스트

 

기능 브랜치에서 git pull origin dev

 

 

* 다음과 같이 뜰 경우

 

git config pull.rebase false

한 후 다시

git pull origin dev

 

 

<<< , >>>> , ==== 부분을 지워주고, 내가 원하는 방향으로 수정 (수정 사항이 있을 경우)

git add .
git commit -m "충돌해결"
git push origin feature/signup

 

 

Github에서 merge 해준다.

Merge pull request 눌러주면 합쳐짐

 

 

8. 내 로컬의 dev에도 변경 사항 반영

 

아직 내 컴퓨터의 dev 에는 내가 새로 개발한 기능이 없는 상태

 

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

b. git pull origin dev

 

 

git checkout -b feature/기능이름

->다음 기능 개발

 

위 과정을 반복한다.