[2주차 - DAY1] Git 고급
branch 이름 규칙
- 기능 개발: feature
- ex) feature/login, feature/select-product
- 출시 준비: release
- ex) release-1.3. release-1.4
- 긴급 수정: hotfix
- ex) hotfix-1.2.1
branch 삭제
git branch -d 브랜치이름
branch에 커밋 반영하기
아래와 같이 두 개의 브랜치를 생성했다.
feature/login 브랜치로 이동한 후 test2.txt 파일을 아래와 같이 수정한다.
이 상태에서 feature/select-product 브랜치로 이동하면 커밋을 하지 않았기 때문에 수정된 파일이 똑같이 보인다. feature/login 브랜치에서 커밋을 해주고, feature/select-product 브랜치로 이동하면 아래와 같이 line2가 없는 것을 확인할 수 있다.
원격 branch 실습
현재 git에는 아래와 같이 세 개의 브랜치가 있다.
아래는 원격 저장소에 있는 브랜치 목록이다. 원격저장소별칭/브랜치이름 형태다.
git에 만들어둔 브랜치를 원격 저장소로 복제해야 한다. 아래 명령어를 입력하면 깃허브에 브랜치가 복제된 것을 확인할 수 있다.
git push 원격저장소별칭 깃브랜치명
Git branch 전략
fast forward
- main branch에서 feature/login branch 생성
- main branch에서는 추가 구현X, feature/login branch에서만 추가 구현
- main branch에 feature/login branch를 붙임, feature/login branch 삭제
3-way
- main branch에서 feature/login branch 생성
- main branch, feature/login branch에서 추가 구현
- 서로 비교하여 바뀐 것을 정리하여 병합
fast forward + 3-way
Merge
- main branch 보호
- 추가 브랜치를 메인 브랜치로 병합(Pull Request, PR이라고 함)
- 깃허브가 자동으로 충돌 확인 (PR 메시지 신경 써서 작성할 것)
- merge (merge도 commit이다.)
- branch 삭제
feature/login 브랜치를 main 브랜치에 병합시켜 보자.
클릭 후 레포지토리로 돌아가면 아래와 같이 메인 브랜치가 보호되고 있지 않다는 메시지가 뜬다.
GitHub를 Git에 동기화
- 깃허브의 브랜치 목록을 깃에 동기화 (git fetch -p)
- 메인 브랜치로 이동 (git checkout main)
- 메인 브랜치 업데이트 (git pull origin main)
- 병합된 브랜치 삭제 (git branch -d 브랜치이름)
아래는 깃허브 브랜치 목록을 동기화하는 명령어이다.
git fetch -p
로컬에 있는 브랜치는 내가 직접 삭제해줘야 한다. feature/login 브랜치를 삭제해 보자.
병합되지 않았다는 에러가 발생한다. 커밋 로그를 보면 merge commit이 없다. 깃허브에서만 병합된 상태이기 때문이다.
깃의 메인 브랜치를 업데이트하고 커밋 로그를 보자. 꼭 메인 브랜치에 위치한 상태로 실행해야 한다.
다시 브랜치를 삭제하면 문제가 발생하지 않는다.
충돌
충돌 상황 만들기
두 명 이상의 사용자가 동일한 파일을 수정하면 충돌이 발생한다. 컴퓨터1이 feature/1에서, 컴퓨터2가 feature/2에서 작업하려 하는 상황이다.
- 깃허브에서 feature/1 feature/2 브랜치 생성
- 깃허브의 브랜치 목록을 깃에 동기화 (git fetch -p)
- 컴퓨터1: 원격저장소의 feature/1 브랜치를 가져온다. (git checkout -t origin/feature/1)
- 컴퓨터2: 원격저장소의 feature/2 브랜치를 가져온다. (git checkout -t origin/feature/2)
- 두 컴퓨터 모두 해당하는 브랜치로 이동하 test.txt 파일을 켜고, 컴퓨터1은 내용을 feature1로, 컴퓨터2는 내용을 feature2로 수정한다.
- 두 컴퓨터 모두 add, commit, push 한다.
- feature1 브랜치를 main 브랜치로 병합한다.
- 컴퓨터1을 동기화한다.
충돌 해결하기
feature2 브랜치를 병합하려고 하면 자동으로 병합할 수 없다는 메시지가 보인다. 일단 PR 메시지를 쓰고 Create pull request 버튼을 누른다.
컴퓨터2에서도 동기화 과정을 수행하고, 컴퓨터1에서 main 브랜치를 업데이트하면 (git pull origin main) 내용이 feature2로 바뀐 것을 확인할 수 있다.