1. 여러 branch를 만들어보기
Branch: 분기된 가지(다른 차원)
프로젝트를 하나 이상의 모습으로 관리해야 할 때 예) 실 배포용, 테스트 서버용,새로운 시도용
여러 작업들이 각각 독립되어 진행될 때 예) 신기능 1, 신기능 2, 코드 개선, 긴급 수정..
-> 각각의 차원에서 작업한 뒤 확정된 것을 메인 차원에 통합해서 이 모든 것을 하나의 프로젝트 폴더에서 진행할 수 있도록!
1. 브랜치 생성 / 이동 / 삭제하기
add-coach란 이름의 브랜치 생성
git branch add-coach
브랜치 목록 확인
git branch
add-coach 브랜치로 이동
git switch add-coach
브랜치 생성과 동시에 이동하기
git switch -c new-teams // new-teams이라는 브랜치를 생성하고 이동!
*브랜치 이름 수정하고 삭제하기*
to-delete란 브랜치를 만들기
브랜치 이름 바꾸기
git branch -m (기존 브랜치명) (새 브랜치명)
브랜치 삭제하기
git branch -d (삭제할 브랜치명)
*지워질 브랜치에만 있는 내용의 커밋이 있을 경우, 즉 다른 브랜치로 가져오지 않은 내용이 있는 브랜치를 지울 때는 -d대신 -D(대문자)로 강제 삭제해야 한다.
git branch -D (강제삭제할 브랜치명)
2. 각각 브랜치에서 서로 다른 작업하기
1. main 브랜치
Leopards의 members에 Olivia 추가
커밋 메시지 : Add Olivia to Leopards
Panthers의 members에 Freddie 추가
커밋 메시지: Add Freddie to Panthers
꼭 저장하고 commit을 해야 한다! 아니면 아무 일도 일어나지 않는다.
2. add-coach 브랜치
Tigers의 매니저 정보 아래 coach: Grace 추가
커밋 메시지: Add Coach Grace to Tigers
Leopards의 매니저 정보 아래 coach: Oscar 추가
커밋 메시지: Add Coach Oscar to Leopards
Panthers의 매니저 정보 아래 coach: Teddy 추가
커밋 메시지: Add Coach Teddy to Panthers
여기서 git switch main을 하게 되면 브랜치가 바뀌게 되면서 add-coach브랜치에서 설정했던 작업이 없어진다.
프로젝트는 한 폴더 안에 있지만 브랜치를 어디로 switch 하느냐에 따라서 안의 내용들이 달라지게 된다.
3. new-teams 브랜치
pumas.yaml 추가
커밋 메시지: Add team Pumas
jaguars.yaml
커밋 메시지: Add team Jaguars
4. 결과 살펴보기
위치한 브랜치 내에서의 내역만 보기
git log
여러 브랜치의 내역 편리하게 보기
git log --all --decorate --oneline --graph
3. branch를 합치는 두 가지 방법
merge | rebase |
두 브랜치를 한 커밋에 이어붙인다. | 브랜치르 다른 브랜치에 이어붙인다. |
브랜치 사용내역을 남길 필요가 있을 때 적합한 방식 | 한 줄로 깔끔하게 정리된 내역을 유지하기 원할 때 적합한 방식 |
다른 형태의 merge도 있다. | 이미 팀원과 공유된 커밋들에 대해서는 사용하지 않는 게 좋다. |
1. merge로 합치기
add-coach 브랜치를 main브랜치와 merge(main 브랜치로 이동하고 아래의 명령어로 병합)
git merge add-coach
merge는 새로운 하나의 commit이기 때문에 reset으로 되돌리기가 가능하다.
merge 하기 전 해당 브랜치의 마지막 시점으로 소스트리에서 되돌리기
Replace Cheetas with Panthers 마우스 오른쪽 버튼 > 이 커밋까지 현재 브랜치를 초기화
(병합된 브랜치는 삭제)
삭제 전 다시 git merge add-coach를 한다.(현재 main 브랜치에서)
삭제 전 소스트리에서 add-coach 위치 확인
2. rebase로 합치기
new-teams 브랜치를 main 브랜치로 rebase(new-teams 브랜치로 이동 (merge 때와는 반대))
git rebase main
main 브랜치를 열면 new-teams의 브랜치에서 했던 커밋이 없어지기 때문에 new-teams와 main 브랜치의 자리를 바꿔야 한다.
main 브랜치로 이동 후 아래 명령어로 new-teams의 시점으로 fast-forward
git merge new-teams
new-teams의 작업이 main 브랜치안에도 적용이 되었다.
rebase 할 때는 rebase 할 대상 브랜치로 가서 main 브랜치로 이어 붙이기를 한 다음(rebase)에 maim 브랜치에서 merge를 해주면 된다.
new-teams 브랜치 삭제(main브랜치에도 new-teams의 작업들이 저장되었기 때문)
git branch -d new-teams
4. 충돌 해결하기- CLI로 진행(기본)
파일의 같은 위치에 다른 내용이 입력된 상황 -> 브랜치 간 충돌!!!
상황 만들기
conflict-1, conflict-2 브랜치 생성
main 브랜치
Tigers의 manager를 Kenneth로 변경
Leopards의 coach를 Nicholas로 변경
Panthers의 coach를 Shirley로 변경
커밋 메시지: Edit Tigers, Leopards, Panthers
conflict-1 브랜치
Tigers의 manager를 Deborah로 변경
커밋 메시지: Edit Tigers
conflict-2 브랜치 1차
Leopards의 coach를 Melissa로 변경
커밋 메시지: Edit Leopards
conflict-2 브랜치 2차
Panthers의 coach를 Raymond로 변경
변경 커밋 메시지: Edit Panthers
1. merge 충돌 해결하기
git merge conflict-1(main 브랜치에서)로 병합을 시도하면 충돌 발생
현재(main branch)에서는 manager가 Kenneth이고, merge 하려는 conflict-1에서는 manager가 Deborah이다. 둘 중에 하나를 선택해야 한다!
당장 충돌 해결이 어려울 경우 merge 중단할 수 있다.
git merge --abort
해결 가능 시 충돌 부분을 수정(둘 중 하나를 선택: Deborah(conflict-1))한 뒤 git add .(1) git commit(2)으로 병합하면 자동으로 커밋 메시지가 뜬다.
2. rebase 충돌 해결하기
rebase는 각각 따로 rebase 한 뒤에 또 merge로 하기 때문에 각각 따로 충돌이 발생한다.
conflict-2에서 git rebase main로 리베이스 시도하면 충돌 발생
두 브랜치(main, conflict-2)에서 모두 Leopards의 변경이 일어난다!
충돌 부분을 수정한 뒤(conflict-2 브랜치에서 변경한 Melissa를 선택)
git add .
아래 명령어로 충돌이 모두 해결될 때까지 반복한다.
git rebase –continue
leopards.yaml에서는 저장이 되었다.
두 브랜치(main, conflict-2)에서 모두 panthers의 변경이 일어난다!
충돌 부분을 수정한 뒤(main 브랜치에서 변경한 Shirley를 선택) git rebase --continue
Leopards에서 한 번, Panthers에서 한 번 두 브랜치를 rebase헀는데 결과에는 Edit Leopards만 추가된 이유는 충돌 해결 중 두 번째 에서는 main 브랜치의 작업(Shirely)을 선택했기 때문에 커밋으로 추가할 필요가 없기 때문이다.
main 브랜치에서 git merge conflict-2로 마무리 (rebase와 동일)
conflict-1, conflict-2 삭제
깔끔하게 main 브랜치만 남은 것을 확인할 수 있다.
다 사용한 브랜치는 바로바로 삭제하는 것이 혼란을 방지할 수 있다.
5. 충돌 해결하기 - SourceTree로 진행
1. 브랜치 만들고 merge, rebase 하기
to-merge, to-rebase 브랜치 생성
상단의 브랜치 버튼 클릭 왼쪽의 브랜치 탭에서 클릭하여 이동
main 브랜치
Tigers의 manager를 Brenda로 변경
커밋 메시지: Edit Tigers manager
to-merge 브랜치
소스트리에서 to-merge 브랜치를 두 번 클릭
Tigers의 coach를 Ruth로 변경
커밋 메시지: Edit Tigers coach
to-rebase 브랜치
소스트리에서 to-rebase 브랜치를 두 번 클릭
Tigers의 memebers에 Tyler 추가
커밋 메시지: Edit Tigers members
브랜치를 이동하며 파일 살펴보기
to-merge 브랜치 main으로 merge
main에 위치한 뒤 to-merge 브랜치를 우클릭하여 Merge... 클릭
to-rebase 브랜치 main으로 rebase
to-rebase에 위치한 뒤 main 브랜치를 우클릭하여... 재배치 클릭
main에 위치한 뒤 to-rebase 브랜치를 우클릭하여 Merge... 클릭
main으로 이동 후 to-merge와 to-rebase 우클릭하여 삭제
2. merge 충돌 해결해보기
rebase는 충돌 가능시 CLI로 진행 권장(sourceTree로 하면 더 복잡하다.)
conflict 브랜치 생성(sourceTree에서)
main 브랜치
main브랜치 더블클릭 후(소스트리에서)
Tigers의 members에 Kim 추가
커밋 메시지: Edit Kim to Tigers
conflict 브랜치
Tigers의 members에 Park 추가
커밋 메시지: Edit Park to Tigers
merge 하여 충돌 해결해보기
마지막으로 conflict 브랜치 삭제!
'Github' 카테고리의 다른 글
6. HEAD / fetch와 pull (0) | 2022.03.31 |
---|---|
5. Git의 3가지 분류 공간과 삭제와 이동 / RESET (0) | 2022.03.31 |
4. GitHub 사용하기: push와 pull / 원격저장소와 로컬저장소 (0) | 2022.03.30 |
2. 프로젝트 변경사항(add, commit, reset, revert) (0) | 2022.03.28 |
1. Git 설치와 환경설정(CLI와 GUI란?)과 Git설정(프로젝트관리) (0) | 2022.03.28 |