git branch 브랜치 병합하기

allzeroyou·2023년 8월 7일

잘 써보자 GitHub

목록 보기
3/4

문제 사항

fork해온 레포에 새로운 브랜치를 생성하고 체크아웃해 commit한 내용을 origin 레포의 원격 브랜치에 병합해야 함.
근데, git branch 명령어 입력시 fork한 레포의 branch밖에 안보여서 난감한 상황.

그렇다면 이런 상황에 branch끼리 어떻게 병합할까?

문제 해결


예를 들어, 사진 속 'issue1'의 commit 사항을 master 브랜치로 병합하려고 한다.

그럼 브랜치 병합의 명령어는 예상한대로

$ git merge <commit>

이다.
이때, 지정한 커밋 내용이 'HEAD'가 가리키고 있는 브랜치에 넣어진다.
'HEAD'는 현재 사용중인 브랜치에 위치하게 된다. 위 그림에서는 'issue1' 브랜치에 'HEAD'가 위치하게 되는 것.

자, 그럼 'master' 브랜치에 'issue1'을 넣기 위해서는,
우선! 'master'브랜치에 'HEAD'가 위치하게 만들어야 한다는 것이다.

따라서 branch를 checkout해 현재 사용중인 브랜치를 'master'로 변경해주어야 한다.

$ git checkout master
Switched to branch 'master'

병합하기 전에 commit할 파일을 열어 변경된 사항이 있는지 확인한다.
'issue1'브랜치에서 파일을 편집했기 때문에 'master'브랜치로 전환하였으므로, 내용이 변경되어 있지 않아야 한다!

그럼 이제 병합해보자.

$ git merge issue1
	...(생략)
 1 files changed, 1 insertions(+), 0 deletions(-)

이제 'master'브랜치가 가리키는 커밋이 'issue1'과 같은 위치에 이동했다. 이런 방식의 병합을 'fast-forward(빨리감기)병합' 이라고 한다.


위까지는 전형적인 merge방법이다.
하지만 나는 fork한 레포, 즉 내 로컬저장소와 원격저장소라는 차이점으로 로컬저장소의 branch만 보이고 (merge할)원격저장소의 branch가 안보임..
따라서, 찾아본 결과

$ git branch -a
(로컬저장소 브랜치들)
(원격저장소 브랜치들)

로 원격저장소의 브랜치도 확인하였다.
(그전에, git remote -v로 원격저장소가 잘 remote되어 있는지 확인하자.)

이렇게 해서 git merge 했는데, 내가 작업하던 브랜치가 아니여서 git pull 하는 걸 깜빡한거다.
그래서 git pull 했는데..

fatal: Need to specify how to reconcile divergent branches

위와 같은 오류메시지.

git의 버전 업데이트로 인해 git pull시 자동으로 merge전략을 취하는 것이 아니라 pull 전략 중 merge전략을 취해야 해서 발생하는 메시지이다.
(알고보면 친절한...)

hint:   git config pull.rebase false  # merge
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only

따라서 '너 어떻게 pull 할래?' 라고 물어보는거고, 3개의 pull 전략 중 하나를 취하면 된다.
1. git config pull.rebase false: 병합
- 만약, 이 merge전략을 계속해 사용하고 싶다면 git config --global pull.rebase false으로 전역으로 지정하자.

  1. git config pull.rebase true: 병합 취소
  2. git config pull.ff only : fast-forward(기존 branch의 히스토리를 포함하고 있는 경우)

나는 git config pull.rebase false으로 pull땅기고, 한번 더 git merge <브랜치> 해서 파일을 github에 올릴 수 있었다.

깨달은 점

이제는 git의 원리를 이해하고 사용해야 할 때다.(마구잡이로 명령어 쓰는거 아니라, 또 일회성으로 명령어만 입력해 해결되면 넘기는게 아니라)

https://backlog.com/git-tutorial/kr/stepup/stepup1_1.html
위의 포스팅 최고다. git 입문용으로 만드셨는데, 이거 하루 날 잡아서 튜토리얼 완수하면 좋을 거 같다.

도움주신 분들

https://ssung-22.tistory.com/29
https://backlog.com/git-tutorial/kr/stepup/stepup2_4.html
https://velog.io/@yunu/git-pull-%ED%95%A0-%EB%95%8C-fatal-Need-to-specify-how-to-reconcile-divergent-branches.-%EC%98%A4%EB%A5%98
https://wooono.tistory.com/692

profile
모든 건 zero 부터, 차근차근 헛둘헛둘

0개의 댓글