브랜치 목록 확인
git branch
브랜치 생성
git branch 새로운브랜치이름
브랜치 삭제
git branch -d 브랜치_이름
- merge 하지 않은 브랜치를 강제삭제 하려면
git branch -D 브랜치_이름
브랜치 전환
git checkout 전환브랜치이름
- 개인적으로 브랜치가 생성되면서 브랜치 이동이 이뤄지는 걸 추천
git checkout -b 새로운브랜치이름
브랜치 간 비교
git log 비교브랜치(1)..비교브랜치(2)
브랜치 간 코드 비교
git diff "비교브랜치(1)..비교브랜치(2)
브랜치 Flow 보기
git log --branches --graph --decorate --oneline
A 브랜치로 B 브랜치 병합
- A <- B
git checkout A
- A 브랜치로 일단 이동
git merge B
- B 와 병합
브랜치 수련
1. master branch 가 있는 상황
2. master branch 의 코드를 수정하기 위해 issue 53 을 발행한 상황
3. master branch 의 코드를 수정해 나가는 issue 53 브랜치
4. 하필 master 브랜치의 코드를 사용하는 사용자가 버그를 제안하면서 수정중이던 작업을 멈추고 master 코드를 급하게 수정해야하는 상황 발생 - hotfix 브랜치 생성
5. 급한 코드 수정 후 hotfix 브랜치를 master와 merge 후 삭제
- 이를 Fast-forward 라고 일컫는다. merge 하면 이런 메세지가 나옴.
6. 예전 master 브랜치의 코드 수정 작업을 진행한 issue 53 의 코드 수정 작업이 끝남. 이제 master와 병합하고자함.
7. Merge Commit
- 이때는 master 가 issue 53 이 수정하려했던 브랜치와 달라져있다. 따라서 hotfix 된 master 브랜치와 issue 53의 브랜치 를 공통 조상으로하는 Commit 을 하나 만들어서 여기서 병합한다.
- 이것을 Merge Commit 이라한다.
git branch 시나리오
이 정리한 시나리오는 한번 읽어보면서 실습을 하는 것을 추천한다. 그러면 브랜치를 사용하는 방법을 아주 잘 이해할 수 있다.
브랜치 충돌
- 이는 위 시나리오처럼 자동으로 병합할 수 없는 경우를 다룬다.
- 충돌을 실험하기 위해 branch test1, test2 를 만들고 file1.txt 파일만 서로 다른내용으로 바꾸었다.
- 그런 후 master 브랜치에 병합하는 과정을 거치면서 test1, test2 를 master 에 병합한다.
- file1.txt 파일의 내용이 다르기 떄문에 충돌이 난다 !
- 어떻게 해결할 것인가 ?
vi file1.txt
- 병합 과정에서 git 은 '<<<< HEAD =====' 이런 식으로 충돌난 내용을 보여준다.
- <<<< HEAD 부터 ===== 사이 구간이 현재 체크 아웃 된 파일의 내용이고, ===== 부터 >>>>>test1 까지가 병합하려는 대상인 test1 브랜치 이다.
- 나는 master 브랜치에 test2 를 먼저 병합하고 test1 을 병합하는 과정에서 충돌이 난 상황이다.
- 이 둘중 어떤 브랜치의 내용이 확실히 필요한지를 판가름하여 필요없는 코드는 지워주면 된다.
- test1 의 내용 선택
- test1 내용 빼곤 다 지워 주면됨 ===== 부터 위쪽 <<<HEAD 까지
- 그 이후 master 브랜치는 add 후 commit 을 진행해주면된다.
- merge 과정 중 confilct는 이러한 Flow 로 해결을 자주한다.
- 애초에 이런 일이 없게 지속적인 체크가 필요하다.