[Git] Git으로 나만의 저장환경 만들기 (4) - 브랜치 병합 및 관리
$ 개발 환경은 맥 OS Catalina임을 알려드립니다 $
지난 시간에 깃에서 브랜치를 만들고 기본적으로 관리하는 방법을 알아봤습니다.
이번에는 만들어진 브랜치를 병합하는 과정을 알아볼 예정입니다.
기껏 갈라놓은 브랜치를 왜 다시 합치는 걸까요?
어떤 작업을 진행하던 도중 필요한 경우에는 이곳저곳에 흩어진 데이터를 한 곳에 모아서 정리를 할 필요가 있습니다.
이걸 위해서 브랜치를 병합하는 것이지요.
지난 번에 만든 깃으로 이동해서 시작해봅시다.
지난 시간에 이어서 애플에서 아이폰 설명서만이 아닌 아이패드 설명서도 만들어 달라고 부탁이 들어왔다고 생각해봅시다.
그래서 애플 브랜치에서 아이폰과 아이패드 브랜치를 만들어서 작업을 해봅시다.
브랜치 명령어로 아이폰과 아이패드 브랜치 만들어 주시고 우선 아이폰 브랜치로 체크아웃해봅시다.
그리고 iPhone 설명서를 만들어 봅시다. 적당한 걸 넣어주세요. 전 시리로 하겠습니다.
스테이징과 커밋해주시고 아이패드 브랜치로 이동해 줍시다.
아이패드 브랜치에는 이번에 도입된 iPad OS를 넣어주겠습니다. 같은 작업을 반복해 주세요~
로그 브랜치 그래프 옵션으로 확인을 해보면 애플 브랜치에서 두 브랜치가 나온 것을 알 수 있습니다.
이렇게 해서 애플에 가져갔더니 애플에서 아이패드랑 아이폰 설명서를 그냥 하나의 저장소에 넣어달라고 합니다.
이럴 땐 어떻게 하는 게 좋을까요? 두 브랜치를 합치면 가장 편리할 겁니다.
이제 두 브랜치를 병합해봅시다!
아이폰 매출이 많으니 아이폰 브랜치에 아이패드 브랜치를 병합합시다.
우선 병합의 핵심이 되는 브랜치로 이동을 해줍니다.
그리고 병합을 하고 싶은 브랜치를 적어줍시다.
< Command >
$ git merge [branch]
< Terminal Code >
$ git merge iPad
만약 병합이 성공적으로 이루어졌다면 vim이 실행되면서 아래와 비슷하게 나올 겁니다.
ESC 누르고 :wq로 저장 후 종료를 해줍시다.
ls 명령어로 파일에 있는 자료를 확인해보면 아래와 같이 iPad에 있는 자료가 iPhone 브랜치에 있음을 알 수 있습니다.
이번에는 브랜치를 이용해서 결과를 확인해볼까요?
마치 길이 하나로 모이는 것처럼 브랜치가 합쳐진 것을 볼 수 있습니다.
병합할 때 편집기를 열지 않는 명령어도 존재합니다.
< Command >
$ git merge [branch] --no--edit // 편집기 열지 않는 것을 설정
$ git merge [branch] --edit // 편집기를 여는 것으로 설정
만약 이후에 같은 파일인데 하나의 브랜치에서는 수정을 했지만 다른 브랜치에서는 수정을 하지 않은 경우 병합을 진행하면 어떻게 될까요?
apple 브랜치와 samsung 브랜치에는 동일하게 base.txt 파일이 존재를 합니다.
apple 브랜치에 현재 있으니 apple 브랜치의 base.txt를 수정해 봅시다. 적당히 아무거나 적어주세요.
단 이번에는 한 줄을 띄지 않고 작성해줍시다.
사실 진짜 이 깃을 만든 목적상 삼성과 애플 브랜치를 병합을 진행하면 안 되지만 병합을 진행해서 어떻게 변하는지 확인을 해봅시다.
< Terminal Code >
$ git merge samsung
아마도 다음과 같은 오류가 날 수도 있습니다. 이건 제가 실수를 한 건데요.
원래 기존의 base.txt는 7번 항목 이후 한 줄을 띄운 상태로 저장을 했기 때문에 8번을 위와 같이 입력하면 자료 간의 충돌이 발생을 합니다.
이때 vim을 통해 base.txt를 확인해 봅시다.
위와 같이 어떤 부분에서 문제가 생겼는지 확인을 해보면 <<<<<HEAD과 ====사이는 HEAD의 지목 브랜치에서 수정된 내용입니다.
====과 >>>>사이는 >>>>뒤에 있는 브랜치에서 수정한 내용입니다.
위의 내용을 원하는 대로 수정하고 커밋을 해줍시다.
브랜치들을 두서없이 병합한 결과입니다.... 보기만 해도 답답해 보이죠
이제 병합이 끝났으니 병합에 끈 브랜치는 삭제를 해줍시다.
iPad는 지웁시다. 저장소의 기본 브랜치가 master이므로 master로 이동해줍시다.
브랜치는 다음과 같이 삭제해줍시다.
< Command >
$ git branch -d [branch]
< Terminal Code >
$ git branch -d iPad
아래와 같이 성공적으로 삭제가 되었다고 나오면 된 겁니다.
만약 브랜치를 실수로 만들고 삭제를 해야 한다면 어떻게 할까요?
생각보다 쉽습니다. 그냥 브랜치를 끊어버리면 됩니다.
< Code >
$ git reset [commit hash]
< Terminal Code >
$ git reset 313d~~
이렇게 입력을 하면 해당 커밋의 단계로 이동하면서 브랜치가 연결이 끊기게 됩니다. 이전에 배웠던 것과 비슷한 메커니즘입니다.
또한 커밋을 진행하지 않고 수정한 내용을 숨기거나 보관을 해야 하는 경우도 있습니다.
당장에 업로드는 하면 안 되지만 변경사항을 가지고 있어야 하는 경우일 텐데요.
이럴 때는 git stash를 사용하면 됩니다.
< Terminal Code >
$ git stash
이렇게 입력을 하면 어떤 차이가 나타나는지 보여드리겠습니다.
차이를 보여드리기 위해 테스트 파일을 우선 커밋까지 하고 수정을 하겠습니다.
수정을 진행하면 당연히 위와 같이 수정되었다는 표시가 나타납니다.
이때 stash를 사용하면 다음과 같이 변경됩니다.
수정되었다는 메시지가 사라져 있습니다. 즉 이렇게 보관이 된 상태로 넘어가게 되며 보관된 파일을 확인하는 방법도 있습니다.
< Command >
$ git stash list // 보관된 리스트 출력
$ git stash pop // 보관된 파일 되돌리기
여기서 주의해야 할 점은 stash의 파일 저장 방식은 스택 형식으로 저장이 됩니다.
그래서 보관한 파일을 되돌릴 경우 가장 나중에 보관한 파일부터 불러와지게 됩니다.
지금까지 깃 사용법을 알아봤습니다. 이제 깃을 좀 더 잘 활용하기 위한 방법인 깃허브를 사용해봅시다!
'Computer Science > Git' 카테고리의 다른 글
[GitHub] GitHub로 나만의 저장소 관리하기 (2) - 깃허브 연동 (0) | 2020.03.11 |
---|---|
[GitHub] GitHub로 나만의 저장소 관리하기 (1) - 깃허브 가입 및 설정 (0) | 2020.03.10 |
[Git] Git으로 나만의 저장환경 만들기 (3) - 브랜치 (branch) 기초 (0) | 2020.03.08 |
[Git] Git으로 나만의 저장환경 만들기 (2) - 깃 데이터 기본 관리 (0) | 2020.03.02 |
[Git] Git으로 나만의 저장환경 만들기 (1) - 깃 기본 활용 (0) | 2020.03.02 |