[Lesson 1] : 여러 branch 만들어보기
하나의 줄기가 main차원
한 프로젝트에 여러 branch.
commit을 해야 싹이 나간다.
[Lesson2] : branch를 합치는 두 가지 방법
프로젝트의 메인 줄기는 main브랜치에서 진행되고, 다른 두 곳(add-coach, new-teams)에서 다른 실험적인 시도를 해 보고 있다.
이곳들에서 진행한 내용들이 모두 채택돼서 이들을 메인 브랜치로 가져올 것이다.
이를 진행하는 방식은 두가지가 있다.
Merge vs Rebase
- Merge: 두개를 이어 붙이는 것. 그 과정에서 커밋 하나가 더 생긴다.
새로 생기는 노란색 커밋에는 원래 브랜치랑 병합될 브랜치의 모든 변화들이 다 담기게 된다.
파란색 메인 브랜치에다가 초록색에서 작업했던 세 커밋의 변화들을 한꺼번에 적용하는 것.
add-coach브랜치를 merge한 다음에, new-teams브랜치는 rebase.
- Rebase: 브랜치의 커밋들을 대상 브랜치로 옮겨 붙이는것. 마치 메인 브랜치에다가 new-teams 브랜치의 커밋들을 하나하나 추가한 것 처럼.
Merge를 하는거나, rebase를 하는거나 결과물은 똑같은것 아닌가?
결과물은 같지만, 차이가 있다면 히스토리. 즉, 내역이다.
Rebase를 한 뒤의 히스토리는 깔끔하게 한 줄로 정리되지만,
merge는 브랜치의 흔적을 남긴다. 브랜치가 몇개 안되면 상관없지만, 많은 브랜치가 사용되는 프로젝트에서는 프로젝트의 진행 내역들을 보고 파악하기가 복잡해질 수 있다.
[Lesson3] : branch 합치기 실습
1/ 먼저 주 브랜치로 이동한다. main브랜치로 이동.
2/ git merge "합칠 브랜치명" : git merge add-coach
main브랜치와 add-coach를 합치는 새로운 commit이 새로 생성되었다.
merge는 하나의 새로운 commit이다. 그래서 merge하기 전 상태로 reset으로 되돌리기가 가능하다.
2. rebase로 합치기
1/ merge할때는 main으로 이동한다음, 대상 브랜치를 git merge 이렇게 했다면, rebase는 대상 branch로 먼저 이동.
2/ main브랜치로 가지 이어붙이기 : git rebase main
3/ 메인 브랜치의 싹을 맨 끝으로 옮겨준다.
소스트리를 보면 new-teams와 master의 위치가 다르다.
main은 가지 끝까지 가지 않는다.
그래서, main브랜치로 이동한 후, merge를 해줘야한다.
4/ 브랜치 삭제
git branch -d new-teams
[Lesson4] : 충돌 해결하기
브랜치간 충돌 : 이쪽 브랜치, 저쪽 브랜치에서 같은 파일 안에 같은 줄에 서로 다른걸 입력해버리면 병합할때 컴퓨터는 어떤걸 선택해야할지 모르기때문에 충돌이 발생한다. 니가 알려줘.
충돌이 없었을때는 merge한다음 바로 커밋 메시지가 떴다.
하지만 충돌이 생기면 아래와 같은 것이 뜬다.
내용이 간단할 때는 괜찮은데, 충돌난부분이 너무 많아서 merge를 중단해야겠다고 생각이 드면,
git merge --abort로 머지 중단.
충돌난것 해결한 다음, git add, commit을 해주면 된다.
git commit 이렇게만 적어주면 자동으로 commit메시지가 만들어진다.
git rebase를 할때 commit 두개가 모두 master와 충돌이 난다.
git merge는 충돌난거 한꺼번에 뜨기때문에 커밋 하나로 끝난다. 하지만 rebase는 다르다.
커밋을 모두 옮기는 작업이기 때문에 모든 커밋마다 충돌을 차례대로 해결해야한다.
both modified : 양쪽 브랜치에서 모두 이 leopards.yaml을 건드리려고 한다. 그러니 충돌난 부분을 니가 해결해줘.
충돌난거 해결한 후, git add .를 한 다음, git rebase --continue를 해줘야한다.
그러면 일단 커밋을 먼저 하라고 하면서 커밋 메시지 자동 생성을 해준다.
커밋을 한 후, 또 conflict가 발생한다.
수정하고 add . --> git rebase --continue 하면 된다.
자, conflict-2는 commit이 두개였는데, 왜 결과적으로는 하나(Edit Leopards)만 추가되었나?
-> 충돌 해결 중, 두 번째 것에서는 current, 즉 main브랜치것(Shirley)을 채택했기 때문에 (즉, rebase가 의미가 없어졌으므로) 커밋으로 추가할 필요가 없어졌기 때문.
master가 뒤쳐져있기 때문에 맞춰주기위해
git switch main -> git merge conflict-2 해서 맞추면 된다.
나머지 브랜치 conflict-2, conflict-1 브랜치는 지워주자.
제때제때 지워줘야 깔끔.
git branch -d conflict-1
git branch -d conflict-2
* 모든 자료의 출처는 얄팍한 코딩사전입니다.
'GitHub' 카테고리의 다른 글
[Github] 잔디반영 에러(잔디 안심어지는 현상) (0) | 2023.10.21 |
---|---|
얄코 깃 끝장내기 [1] (0) | 2022.07.10 |