일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 코딩테스트
- sort
- 그리디알고리즘
- 리그오브레전드
- 자바
- programmers
- Riot
- 롤
- java
- 스파르타내일배움캠프
- 파이썬
- 코딩테스트준비
- 백준
- 스파르타내일배움캠프TIL
- python
- greedy
- 알고리즘
- 프로그래머스
- Django
- 탐욕알고리즘
- SQL
- 그리디
- 장고
- API
- 내일배움캠프
- git
- 라이엇
- lol
- drf
- github
- Today
- Total
Lina's Toolbox
Git & Github 으로 협업하는 법 / git branch, git merge, git pull request 본문
Git & Github 으로 협업하는 법 / git branch, git merge, git pull request
Woolina 2024. 7. 4. 13:131. 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/기능이름
->다음 기능 개발
위 과정을 반복한다.
'스파르타 내일 배움 캠프 AI 웹개발 과정 > git' 카테고리의 다른 글
Readme 꾸미기 - 헤더, 뱃지 넣기 (0) | 2024.09.20 |
---|---|
현업에서 자주 사용하는 유용한 협업 툴 소개 / Sourcetree, Jira, Gerrit (1) | 2024.09.13 |
스파르타 코딩 클럽 - 내일배움캠프 12일차 TIL (0) | 2024.07.10 |
Git 필수 명령어 (2) | 2024.07.05 |
스파르타 내일배움캠프 AI웹개발 과정 | 7일차 복습/ 깃허브 연결된 리퍼지토리 변경하기 (2) | 2024.07.02 |