일단 시작하는 Git (8)

Do_Doolly·2022년 5월 18일
0

형상관리 도구

목록 보기
8/11
post-thumbnail
  • 글에 적은 내용 중 잘못된 부분은 댓글로 적어주시면 감사하겠습니다!

🔜 공동 작업

저번에 브랜치에 대한 개념을 알아봤다. 공동 작업에 대한 기준 혹은 큰 흐름을 나무의 줄기에 비유했을 때, 내가 작업하는 공간을 가지(브랜치)라고 보는 것이다. 이 때, 내가 작업한 결과물을 공동 작업에 합치려면 어떻게 해야할까?


🧐 브랜치 병합(Merge)

1. 병합(Merge) 준비

브랜치의 병합 혹은 머지(Merge)의 의미는 유추하기 쉬울 것이다. 개인이 작업한 결과를 하나로 합치는 건데, 그렇다면 어떻게 합치는 걸까?
병합에도 여러 종류가 있지만 기본적으로 쓰이는 3-Way-Merge가 있다. 두 개의 브랜치의 공통 부모 커밋을 찾고, 그 커밋을 기준으로 각각의 차이를 합치는 것이다!
이 때 현재 체크아웃된 브랜치에 병합된 결과가 커밋되므로, 현재 헤드가 어디에 있는지 유의하자.

  • 메인 브랜치에 희동이의 브랜치를 병합하는 경우
  • 희동이 브랜치에 메인 브랜치를 병합하는 경우 (이럴 경우 메인 브랜치에서는 병합 결과를 알 수 없다)

2. 병합

실제로 터미널에서 병합 작업을 실행해보자. git log를 직선으로 된 그래프처럼 보려면 아래와 같이 입력하면 된다.

$ git log --all --oneline --graph


상당히 복잡해 보이는데 이건 내가 작업 순서를 좀 뒤죽박죽 섞어서 그렇다... 간단하게 도식화하면 1번의 사진과 같다. 현재의 희동이는 기존 메인 브랜치 작업에서 본인의 개인작업인 heedong_work.txt를 만들었고, 메인 브랜치는 희동이의 작업과 무관하게 진행되었다.

  • 희동이의 현재 작업 상황
  • 메인 브랜치의 현재 작업 상황

git 병합을 진행하는 명령어는 merge + "병합할 브랜치 이름" 이다.

$ git merge heedong

병합 후 폴더 내 파일들을 보면 아래와 같이 희동이가 작업한 heedong_work.txt가 메인 브랜치에 생성되고, mainStart.txt는 삭제된 것을 알 수 있다.

  • 병합 후 메인 브랜치의 작업 상황

3. 병합 후

병합 후 로그를 보면 희동이 브랜치는 그대로 남아있는 것을 볼 수 있다. 병합 작업을 한다해도 git은 브랜치를 따로 삭제하지 않는다! 혹시 희동이의 개인작업이 끝난 뒤, 새로운 개인작업으로 브랜치를 만들고 싶으면 메인에서 새로 생성해야 한다.

그럼 만약에 둘리가 현재 메인 브랜치의 작업을 개인 작업과 합치고 싶으면 어떨까? 그럴러면 헤드가 둘리 브랜치에 있어야 하고, 그 상태에서 병합을 진행하면 된다.

  • 둘리의 현재 작업 상황
  • 메인 브랜치와 병합 후 작업 상황

그러면 위와 같이 현재 최신 작업 상황인 희동이의 개인 작업과 메인 작업이 둘리 브랜치에 합쳐진 것을 볼 수 있다.


🔚 마무리

브랜치를 병합은 정말 빈번하게 사용된다. 로컬환경에서는 큰 의미가 없지만, 원격저장소을 둘 경우 병합은 필수고, 원격 환경에서는 또 헷갈리게 만드는 부분이 있다.
그리고 오늘 한 내용은 3-Way-Merge에서 두 브랜치가 같은 내용을 수정한 것이 없어서 문제가 안되지만, 만약에 같은 내용을 수정했을 경우 자동으로 병합되지 않는다. 이 때는 병합하는 관리자가 직접 어떤 파일로 병합할 것인지를 선택해줘야 한다.
다음에는 충돌과 다른 병합 방법에 대해 알아보자



& Git 강의 링크

생활코딩 Gitn

profile
생각하면 복잡하니까 일단 해보자

0개의 댓글