Git: Merge하기 (+ non-fast-forward error)

Git Merge(병합)


A 브랜치: 상위 브랜치, 병합 당할 브랜치
B 브랜치: 하위 브랜치, 병합 할 브랜치

A 브랜치로 이동한 후, merge를 해준다.

git switch A
git merge B
git push origin A

충돌


git merge 사용 시, 동일한 파일을 수정한 경우에 해당 파일에서 충돌이 일어난다.

  • 충돌 예시
    • A 브랜치
      <!-- hello.html -->
      <p>안녕하세요?</p>
      
    • B 브랜치
      <!-- hello.html -->
      <p>안녕하세요!</p>
      
    • 충돌
      You have unmerged paths.
      (fix conflicts and run "git commit")
      (use "git merge --abort" to abort the merge)
      
      Unmerged paths:
      (use "git add <file>..." to mark resolution)
      both added:      hello.html
      
    • 파일 수정
      <<<<<<< HEAD
      <p>안녕하세요?</p>
      =======
      <p>안녕하세요!</p>
      >>>>>>> develop
      

      HEAD 아래 있는 내용은 A브랜치(병합 당할) 내용, develop 위의 내용은 B브랜치 내용이다. 두 내용 중 필요한 내용만을 남기거나 수정하면 된다.

      <p>안녕하세요!</p>
      
    • 커밋
      git commit
      

      메세지가 뜨면 메세지 저장후 :wq로 나오면 커밋이 된다!

      ![rejected] non-fast-forward error


      해당 에러는 merge 에러는 아니지만 merge를 하다가 발생한 에러라서 여기에 적는다.
      ![rejected] non-fast-forward error: failed to push some refs to <원격 저장소 주소>
      해당 에러는 원격 저장소와 로컬 저장소에 공통점이 없는 상태에서 병합을 시도할 경우 발생하는 에러라고 한다. 즉, 관련이 없는 저장소를 병합하는 것을 막아놓은 것이다.

  • 해결방법 1
    git pull origin <branch> --allow-unrelated-histories
    

    해당 명령어를 통해 관련 없는 두 브랜치를 병합하도록 만들어준다. 다만, 해당 명령어는 단방향(Pull Request)이기 때문에 사용이 안될 수도 있다.

  • 해결방법 2
    git reset HEAD^
    git --force push origin <branch>
    

    git reset HEAD^를 통해 직전 커밋 내용을 삭제하고 git --force push origin <branch>를 통해 강제로 push를 해준다.
    --force를 붙힘으로 강제로 push 할 수 있다.

Comments