목차
- 브랜치 개념
- 브랜치 만들기
- 브랜치 병합하기
- 충돌 해결하기
- 브랜치 재배치하기
<브랜치 개념>
브랜치 : 버전의 분기
master 브랜치 : 최초의 브랜치
HEAD : 현재 작업 중인 브랜치의 최신 커밋
체크아웃 : 특정 브랜치에서 작업할 수 있도록 작업 환경을 바꾸는 것
(master 브랜치로 체크아웃을 한다 = HEAD가 master 브랜치의 최신 커밋을 가리킨다)
브랜치 이름은 암묵적으로 정해져있다.
feature/<새기능> : 새로운 기능을 개발하기 위한 브랜치 ex) feature/menu
release/<릴리스 번호> : 릴리스를 준비하기 위한 브랜치 ex) release/2.3.0
hotfix/<수정 사항> : 급하게 수정해야 하기 위한 브랜치 ex) hotfix/login
<브랜치 만들기>
먼저 저장소에 파일 a, b, c를 추가한 상태이다.
브랜치 버튼을 누르고 이름을 적는다. (책에서 브랜치명을 foo랑 bar로 쓰던데 왜일까. foobar-O panda? 유래를 검색해보니 아무도 모르는 듯 하다.)
'새 브랜치 체크아웃'에 체크를 하면 작업환경을 새 브랜치로 바꾼다는거다.
foo 브랜치 작업환경에서 파일탐색기에 d_foo, e_foo 파일을 추가했다.
왼쪽 브랜치 하단에 foo 옆에 동그라미 표시가 되어있는 것을 확인할 수 있다. 여기서 master 브랜치를 더블클릭하면 HEAD가 master로 바뀐다.
그러면 이렇게 d_foo, e_foo가 추가되기 전인 상태가 된다. 따란~
<브랜치 병합하기>
빨리 감기 병합 (fast foward merge) : 변화가 없었던 브랜치가 마치 빨리 감기 하듯 업데이트되는 병합 기법.
(예를 들어 위 상황에서 master에는 새로운 브랜치가 생긴 이후에 추가적인 커밋이 일어나지 않았기 때문에, foo 브랜치를 master 브랜치로 병합할 경우 master 브랜치는 foo 브랜치와 같은 모양이 된다.)
브랜치 bar를 추가한 상태이다. (bar에는 d_bar 파일이 추가되어있음)
foo브랜치를 master 브랜치로 병합할 것이다. master로 체크아웃 된 상태에서 'foo' 우클릭 -> 현재 브랜치로 'foo' 병합
이러면 master = foo 가 된다. (동일하다는 거 아니고 대입(=)의 의미)
이런 식으로 완전히 동일해진다면 굳이 브랜치가 같은게 2개 있을 필요가 없다. 즉 foo를 잘라내는 작업을 한다.
아래엔 브랜치 삭제하는 방법 2가지가 있다.
방법1.
방법2.
병합을 하는 다른 방법도 있다.
위의 탭에서 '병합'을 누르고, 커밋을 클릭한 뒤 확인을 누르면 된다. (마찬가지로 병합이 필요한 곳에서 먼저 체크아웃을 한다.)
예를 들어 4번 커밋을 병합할거면 4번 커밋을 누르고 확인, 4~6번 커밋을 모두 병합할 거면 6번 커밋을 누르고 확인하면 된다.
<충돌 해결하기>
저장소 비우고 다시 만듦. master와 slave 브랜치가 있다.
저장소에는 a.txt가 있는데 원래 'fisrt'라는 문자열이 있었으나 master에서는 'master'로, slave에서는 'changed'로 바꾸었다.
이 상태에서 master와 slave를 병합해보면 아래와 같이 뜬다.
충돌이 되었다고 한다. 닫기를 누르면 아래와 같이 변한 것을 확인할 수 있다.
밑에 있는 스테이지에 올라가지 않은 파일 a.txt를 누르면 오른쪽에 내용이 이렇게 뜬다.
<<<<<<HEAD
master
이건 현재 체크아웃한 공간에서 충돌이 일어나는 곳의 내용이 'master'라는 것을 의미
changed
>>>>>>slave
이건 slave 브랜치에서 충돌이 일어나는 곳의 내용이 'changed'라는 것을 의미한다.
=======를 기준으로 위랑 아래 중 뭘 선택할 지는 우리가 선택할 몫이다.
master 내용으로 바꾸는 선택을 했다. a.txt 우클릭 후 충돌해결->'내것'을 이용해 해결을 누른다.
(현재 체크아웃된 브랜치로 선택)
slave 내용으로 바꾸는 선택을 한다면 아래의 '저장소'것을 사용하여 해결을 누르면 된다.
'내것'을 이용해 해결 : 현재 체크아웃된 브랜치의 내용을 병합에 반영
'저장소'것을 사용하여 해결 : 병합하려는 브랜치의 내용을 병합에 반영
그러고 나면 아래와 같이 자동으로 커밋 메시지가 생성되는데 걍 커밋하면 된다.
<브랜치 재배치하기>
재배치를 위해 일단 저장소는 아래와 같이 설정했다.
master 브랜치에 a.txt, b.txt를 추가한 내용 커밋.
slv 브랜치에 c_slv.txt, d_slv.txt를 추가한 내용 커밋.
master 브랜치에 c.txt, d.txt를 추가한 내용 커밋.
master는 a, b, c, d가 있고 slv는 a, b, c_slv, d_slv가 있는 상황.
여기서 slv를 master의 4번 커밋(d 다음)으로 브랜치를 재배치하려고 함.
slv로 체크아웃한 상태로, 재배치 하려는 커밋에 우클릭->재배치를 누른다.
그러면 아래와 같이 재배치된 것을 확인할 수 있다. slv는 a, b, c, d, c_slv, d_slv가 있는 상태가 된다. (master는 당연히 그대로이다.)
이 경우 slv에 처음에 c.txt, d.txt가 아닌 c_slv.txt, d_slv.txt로 만들어줬기 때문에 파일명이 달라서 충돌이 일어나지 않았다. 그러나 같은 이름의 파일이 있을 경우 충돌이 발생할 수 있음.
'TIL > 깃&깃허브' 카테고리의 다른 글
모두의 깃&깃허브 5장_깃허브로 협업하기 (2) (1) | 2024.09.05 |
---|---|
모두의 깃&깃허브 5장_깃허브로 협업하기 (1) (0) | 2024.08.31 |
모두의 깃&깃허브 3장_버전 가지고 놀기 (0) | 2024.08.24 |
모두의 깃&깃허브 2장_깃으로 버전 관리 시작하기 (2) (0) | 2024.08.23 |
모두의 깃&깃허브 2장_깃으로 버전 관리 시작하기 (1) (0) | 2024.08.20 |