Git고급
1. 깃 브랜치
여기서 중간의 메인 브랜치를 통합 브랜치, 중간중간 뻗어나간 브랜치들을 토픽 브랜치라고 한다.
- 주요 브랜치:
- master: 제품으로 출시되는 브랜치
- develop: 다음 릴리즈를 위해 개발하는 브랜치
- 보조 브랜치:
- feature: 새로운 기능 개발
- release: 다음 버전을 위한 테스트와 버그 픽스
- hotfix: 프로덕션에서 발생한 긴급한 버그 픽스
2. 브랜치 복사
2.1. 브랜치 생성 시점
일반적으로 브랜치를 생성할 때는 마지막 커밋을 기준으로 한다
*브랜치를 복사한다고 해서 바로 branch가 되는 것이 아니라, commit을 한 순간 부터 브랜치에 복사가 된다.
2.2. 깃허브에서 브랜치 확인
git branch -r
2.3. 깃에서 브랜치 확인
git branch
2.4. 깃(로컬)에서 브랜치 생성
git branch [브랜치명]
git branch firstBranch
git checkout firstBranch
git commit -m "firstCommit"
2.5. 깃허브에 브랜치 생성 및 복제
git push [깃허브별칭] [깃브랜치명]
2.6. 깃에 브랜치 삭제
git branch -d
2.7. 깃허브에 삭제한 브랜치 깃에서 동기화
git fetch -p
3. 브랜치 전환
3.1 깃에서 브랜치 전환
git checkout [브랜치명]
주의 할 점 :
현재 브랜치에서 커밋하지 않은 변경 사항이 있다면 브랜치를 전환 할 수 없다.
[해결방안]
- 커밋을 하고 전환
- * stash로 명령어로 변경 사항을 임시 저장하고 브랜치 전환
git stash
* commit 이후로 변경된 모든 사항들이 stash 공간으로 이동
3.1 깃허브있는 브랜치 전환
git checkout -t [브랜치명]
4. 브랜치 전략 (깃 플로우)
4.1. fast forward
master 브랜치가 단순히 앞으로 이동하는 병합을 fast-forward 병합
깃에서 머지하는 방법 중 하나로, 브랜치를 머지할 때, 히스토리를 한 줄로 정리
이는 기본적으로 브랜치의 변경 사항을 다른 브랜치에 적용할 때 사용
4.2. 3-way (+ fast forward)
깃에서 머지하는 또 다른 방법으로, 3-way 머지는 두 브랜치의 공통 조상이 있는 경우에 사용
이 방법은 각 브랜치의 변경 사항과 공통 조상의 변경 사항을 비교하여 새로운 커밋을 생성
Fast forward 머지와 달리 브랜치 히스토리가 더 자세하게 기록된다.
5. rebase
이 상태에서 merge를 사용하면 non-fast-forward병합이 이루어진다.
그러나 rebase를 사용하면 다른 방법으로 브랜치를 병합할 수 있다.
rebase는 간단히 말해 issue1이 분기되는 커밋부터 마지막 커밋까지를 잘라서 master 브랜치의 끝에 붙이는 것!
즉, issue1 브랜치에 master의 최신 커밋을 반영한다고 말할 수 있다.
rebase를 할 때는 merge와는 반대로 issue1 브랜치에 HEAD를 둔 상태에서 아래 코드 입력
git rebase master
issue1 브랜치 전체가 master 브랜치의 끝에 붙음으로써 master 브랜치의 최신 커밋이 반영
=> 이로써 issue1은 master의 모든 변경사항을 포함
여기서 master 브랜치로 이동한 후 merge하면 forward 병합이 일어나게 됩니다.