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 <원격 저장소 주소>
해당 에러는 원격 저장소와 로컬 저장소에 공통점이 없는 상태에서 병합을 시도할 경우 발생하는 에러라고 한다. 즉, 관련이 없는 저장소를 병합하는 것을 막아놓은 것이다.
- A 브랜치
- 해결방법 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