브런치라는 기능이 깃에 있는거는 알고 있었지만, 왠지 복잡해 보여서, 배우기 어려워서 안쓰는 경우가 참 많다.
매우 편한 기능이니 이번기회에 제대로 배워서 확실하게 이용해보기를 권한다 .
브런치는 여러명이 서로 다른 브런치에서 하나의 파일을 작업하고 merge를 통해 파일을 합칠 수 있다.
1단계) 우선 깃으로 관리되는 파일을 하나 만들자.
cd Desktop
mkdir base-test
cd base-test
git init
vim hi.txt
안에 내용 채우기
git add .
git commit -m "master change"
자 위에 코드에서도 힌트를 한번 주었듯이 항상 우리가 만드는 깃 파일은 디폴트로 마스터 브런치가 관리하게 되어있다.
마스터 브런치도 브런치의 한 종류임을 우선 기억하자.
2단계)
이제 부터 우리는 가설을 세울 것이다. 만약, 두명의 친구가 에플리케이션 개발을 함께 하고 있다고 가정해보자.
A는 aa브런치를 만들고 B는 bb라는 브런치를 만들것이다.
git branch aa
git branch bb
자 브런치가 두개가 생겼다. 하지만 나는 아직도 master 브런치에 위치해 있다. 왜냐하면 디폴트에서 이동한게 아니라 그저 브런치를 만들어 주기만 한것이기 때문이다. 우리는 서로 master는 최대한 건들지 않고 각자의 브런치에서 파일을 수정하기로 했다.
A의 입장으로 한번 이동해보자. 이제 나는 aa브런치로 이동할것이다.
git checkout aa
나는 이제 파일을 수정해 보려고 한다. master에 있는 원본은 건들지 않고, 내 브런치에 내용을 수정하는 것이다. 그리고 그 내용을 커밋하였다.
vim hi.txt
안에 내용 수정 (aa)
git add .
git commit -m "aa branch change"
다음은 B의 입장에서 한번 수정해 볼것이다. B로 이동해서 한번 수정하고 커밋해보자.
git checkout bb
vim hi.txt
안에 내용 수정 (bb)
git add .
git commit -m "bb branch change"
자 이제 한번 각각의 상태가 어떤지 확인해보자.
git checkout master
cat hi.txt
git checkout aa
cat hi.txt
git checkout bb
cat hi.txt
자 이렇게 우리는 master, aa, bb 브런치의 현재 상태를 확인해 본다.
이것을 통해서 알수 있는게 하나 있다. 각 브런치 별로 서로 다른 작업을 할 수 있다는 것이다.
자 하지만 여기서는 문제가 있다. 하나의 파일에 세개의 다른 내용이 담겨있다는 것이다. 그렇다면 합칠때 누구의 내용으로 합쳐야 하는가?
물론 지금의 케이스는 아주 극단적인 상황을 만들어 본것이다.
보통은 이렇게까지 서로 같은 부분을 건드리지 않을것이고, 어느정도 프로그래머가 서로 어떤 부분을 수정할지 정하고 만든다면 그냥 한번에 merge가 잘 될수도 있다.
하지만, 지금부터 어떻게 하면 merge 할때 이런 conflict를 잘 해결 할 수 있는지 설명해 보려고 한다.
3단계) merge하는 법. 먼저 나는 master와 aa를 합칠것이다.
git checkout master
git merge aa
자 이때는 conflict가 일어나지 않는다. 왜냐하면, master branch가 수정되지 않았기 때문이다.
4단계) conflict 해결하는 법
하지만 한번 aa의 브런치의 내용으로 대체된 master,
즉 이미 수정된 master와 bb를 한번 합쳐보자.
git merge bb
아마도 이렇게 merge 가 실패했음을 알려줄 것이다.
cat hi.txt
이 명령어를 통해서 파일의 내용을 보면 <<<<< 와 ===== 와 >>>>> 로 파일이 나뉜다.
<<<<<<< HEAD 부터 =====까지는 마스터 브런치에서 겹치는 내용을 말하고,
=====부터 >>>>>>> bb는 bb와마스터 브런치가 겹치는 내용을 말한다.
즉 해결법은 간단하다. 둘중 하나를 지우고 다시 merge해주면 된다.
파일에 들어가서 지우고 다음 명령어를 따라하면 최종적으로 멀징이 된다.
git add .
git commit -m "merge"
5단계) 브런치 삭제
git branch -d <브런치 이름>
자 마지막으로 그렇다면 한 100개정도의 겹치는 부분이 나오면 어떻게 이걸 다 하나 하나 고치고 있나요? 라는 질문이 나올 것이다.
맞는 이야기 이다. 문론 그렇게 까지 한번에 merge 해서 큰 문제가 발생하지 않게 미리 미리 관리해야겠지만, 정말 문제가 생긴다면 다음과 같은 오토 acception 방법을 통해 해결 할 수 있다. 즉, merge할때 둘중 한 브런치 내용으로 일방적으로 업데이트 하겠다는 이야기 이다. 그리고 이 내용은 아래 블로그에 잘 정리 되어있어서 이만 설명을 멈추려 한다.
www.atlassian.com/git/tutorials/using-branches
'개발자의 소통 > Git 공부' 카테고리의 다른 글
Git에서 fork한 레파지토리 업데이트 하기 (0) | 2020.08.05 |
---|---|
Git 6단계. 다른 사람 레파지토리 수정후 다시 업데이트-pull (0) | 2020.07.29 |
Git 4단계. 다른 사람 레파지토리에 작업하기 (0) | 2020.07.29 |
Git 3단계. 내 레파지토리 클론해서 로컬에서 수정하기 (0) | 2020.07.29 |
Git 2단계. 내가 만든 파일 깃허브 레파지토리에 올리기 (0) | 2020.07.29 |