[Github] Merge


Merge란…?

우리가 자주 듣는 말이 있다. “OO님 PR 날렸으니 확인 후에 merge 부탁드릴게요~!!”

그렇다면 merge는 뭘까?

우선 git merge에 대한 설명을 하기에 앞서, 로컬 → origin → upstream → PR까지의 과정(머지 직전)에 대해 다시 차근차근 짚어보고자 한다.

기본 구조

  1. 로컬

    우리는 위의 그림과 같이 “나의 컴퓨터”에서 작업하기 위한 local 브랜치가 필요하다. 그리고 이러한 local 브랜치는 대부분 원격 upstream 레포에서 clone해온 브랜치다.

  2. origin repository

    PR의 예시 및 비유

    origin repositoryupstream repo에서 fork해온 레포지토리다. 따라서 originupstream은 서로 연결되어 있으며, origin에서 어떠한 변동사항이 생기면 원본 repository(upstream)에 PR을 날려보라고 제시를 한다(비유).

  3. upstream repository

    모든 repo의 기준점이 되는 upstream repo에는 이에 따라 여러 PR들이 날아온다. A라는 개발자, B라는 개발자, C라는 개발자…. 이들이 “_이것좀 Pull 해주세요!_”하고 PR(Pull Request)를 날린 것들을 하나하나 확인해보고 괜찮다 싶은 것들을 선택해서 나의 원본 repo에 merge(합치다)해줄 수 있는 것이다.

  4. PR (Pull Request) & Merge

    이렇게 PR → Merge가 완료됐다면 나의 upstream repo는 새로 추가된 코드와 합쳐진다.


Merge 방법

merge (fast forward)

merge의 방법 중 가장 기본적인 것이 fast-forward 방식의 merge다.

우선, 아래와 같은 방식으로 main브랜치에서 A브랜치를 따서 작업 중이었다고 가정해보자.

그리고 A 브랜치에서의 모든 작업이 끝나서 main과 A를 합쳐주고 싶은데, 이 때 사용하는 것이 merge다.

하지만, fast-forward merge는 내가 main과 A브랜치를 merge했다는 사실이 commit에 기록되지 않는다는 특징을 갖는다.

main에서 파생된 A브랜치

이후 fast-forward merge가 되면 아래와 같이 main브랜치가 A브랜치의 자리로 병합되며 이동된다!

merge된 후의 모습

근데… 만약 merge에 대한 commit을 남기고 싶다면?

$ git merge —no-ff 를 사용하면 된다!

위의 명령어를 입력하면 자동으로 commit 메시지를 작성하라는 vim이 뜨는데, 해당 vim에서 커밋 메시지를 작성해주면 된다 🙂


Merge Conflict

위와 같은 과정만 반복된다면 git을 배우는게 그리 어렵지만은 않을 것이다….
하지만, 우리를 항상 힘들게 하는 merge conflict라는 것이 존재한다 😩

merge conflict...

merge conflict는 왜 일어날까 ?

머지하려는 두 branch에 동일한 부분에서의 수정이 발생했을 때 conflict이 일어난다.
즉, git이 우리에게 ”**두 브랜치에서 같은 부분이 수정이 됐는데 각각 수정 내용이 달라… 둘 중에 뭘 선택해야돼?**”라고 물어보는 것과 같다고 생각하면 된다.

conflict 해결 방법

  1. 수동 해결 방법 (가장 일반적)

    1. 파일을 직접 열어서 merge할 부분을 선택, 그리고 버릴 것은 삭제!
      ⇒ 둘 중에 하나를 선택해도 되고, 둘 다 가져와도 된다.
      ⇒ conflict 해결 이외의 수정을 해서는 절대 절대 안됨!!!
    2. git add . (진짜 conflict가 난 부분만 수정했는지 반드시 체크해야 한다)
    3. git merge —-continue
  2. tool 활용법 (VS Code)

    1. 터미널에 $ git config —global -e 입력 후 깃 세팅창 열기
    2. 아래와 같이 내용 추가
      [merge]
      tool = vscode
      [mergetool “vscode”]
      cmd = code –wait $MERGED
    3. $ git mergetool 입력 → 머지!
  3. P4Merge 사용하기 (많은 개발자들이 애용)

    1. 설치 (구글링)

    2. mergetool을 p4merge로 수정! (mergetool “vscode”는 굳이 삭제하지 않아도 됨!)

      [merge]

      tool = p4merge

      [mergetool “p4merge”]

      path = “/Applications/p4merge.app/Contents/MacOS/p4merge”

    3. p4merge 활용 예시

      p4merge


Author

Hoonjoo

Posted on

2022-01-31

Updated on

2022-02-07

Licensed under

Comments