본문 바로가기
내일배움캠프(Sparta)

[Git & Github] 협업 하는 법

by mmm- 2023. 10. 25.

Branch

: 기존 코드에 영향을 주지 않고 병렬적으로 작업할 수 있게 만들어주는 기능

 

  • 브랜치 이름은 개발하려는 기능과 관련 있는 이름을 짓는 것이 좋음
    (기능/해당기능이 하는 역할, ex; feature/signup)
  • 기능 새로 만들 때마다 브랜치 생성하

 

브랜치 생성 명령어

git branch <브랜치명>

 

브랜치 확인 명령어

git branch

 

브랜치 이동 명령어

git switch <브랜치명>

or

git checkout <브랜치명>
  • checkout은 기존에 있던 명령어이고, switch는 새로 만들어진 것. 아무거나 써도 상관 X

 

브랜치 한 번에 생성 & 이동

git switch -c <브랜치명>

or

git checkout -b <브랜치명>

Merge

: 코드를 합치는 것

 

git merge <브랜치명>
  • 합치고자 하는 브랜치로 이동 후, 합칠 브랜치를 merge 명령어 뒤에 넣어주면 됨

git stash

: 임시로 코드를 저장해주는 역할을 하는 명령어

  • 급하게 브랜치 이동을 하고 싶은데, 이동이 안되는 경우 주로 사용
    (이동하는 브랜치의 코드와 내가 변경한 코드에서 겹치는 부분이 있을 때 이동 불가)
git stash -u -m "메세지"

-u : untracked 파일(ex; 새로 만든 파일)들의 변경사항도 모두 저장하겠다는 뜻

-m : 커밋 메세지처럼 어떤 기능을 개발하는 중이었는지 간단하게 메세지를 작성할 수 있는 옵션

 

git stash list
  • 해당 명령어로 임시 저장된 부분 확인 가능
  • q를 누르면 빠져나올 수 있음

 

git stash apply <stash@{숫자}>
  • 저장했던 것을 다시 되돌릴 때 사용하는 명령어
  • stash@{숫자} 는 git stash list 명령어 입력시 확인 가능

git reset

: 과거의 커밋으로 되돌아갈 수 있게 해주는 명령어

git reset --hard <커밋id>

Pull Request

: 브랜치로 당겨와 합치는 것을 요청하는 

  • 협업시 보통 github에서 합침 ➡️ merge 전 코드리뷰가 가능하기 때문!
    (git merge 명령어로 합치는 경우 거의 X)
  • 충돌여부 확인, 테스트 자동화 등 다양한 이점들이 존재

진행 방법

  1. push 후, 깃허브 홈페이지에서 Compare & pull request 버튼 클릭
    (안생기거나 사라졌다면 pull requests 탭 클릭 후 New pull request 눌러주면 됨)
  2. pull request 생성
  3. pull requests 탭에서 확인 (충돌 발생시 merge 불가)
  4. 리뷰 요청 및 승인 받기
  5. 로컬에서 pull해서 깃허브 코드와 로컬 저장소 코드 맞추기
  6. 코드 실행 후 문제 없는지 확인
  7. 문제 없으면 github에 merge
    (코드 수정이나 충돌 해결한 경우, git add & git commit & git push 이후 merge)

 

⚠️ 만약, 다음과 같은 에러가 발생하게 되면 

fatal: Need to specify how to reconcile divergent branches 

아래 명령어 입력

git config pull.rebase false

 


실전 협업시 발생할 수 있는 문제에 대한 해결책

 

main 브랜치 ➡️ 배포용

기능 브랜치(ex; login)  ➡️ 기능개발용

dev(or develop) 브랜치 ➡️ 테스트용

 

합치는 건 develop으로 합치고 배포가능하다 싶으면 main 브랜치로 가는 것.

 

진행 순서

  1. 깃허브에서 로컬로 dev 브랜치를 가져오기 (git clone)
  2. 로컬에서 기능개발용 브랜치로 브랜치 이동 (브랜치 생성 후)
  3. 코드 작성 후, (로컬)기능개발용 브랜치에서 push
  4. (깃허브)기능개발용 브랜치에서 dev로 merge
    여기서 충돌을 하게 되면, (깃허브)dev브랜치에서 (로컬)기능개발용 브랜치로 pull 해서 문제 해결 후, 
    깃허브(기능개발용 브랜)로 push
  5. merge 후, 로컬(dev 브랜)로 당겨오기
  6. 배포할 때는 (깃허브)dev브랜치에서 main브랜치로 merge

gitignore

: git이 관리하지 않으면 하는 파일을 .gitignore 파일에 작성
(ex; 비밀번호, 키 등이 숨겨져 있는 .env 파일 등)

 

  • gitignore.io 라는 웹사이트를 활용하면 편리하게 불필요한 파일을 .gitignore에 추가해