[Git] Git 다른 브랜치에서 pull 하기

2023. 5. 26. 21:13프로그래밍

같은 remote에 서로 다른 branch가 있다고 했을 때  branch에 내용은 서로 다를 것이다.

이 때 다른 branch에 commit하기 위해서는 remote 저장소에 있는 것을 당겨오는 pull을 진행해야 하는데 pull이 되지 않는다.

우선 기본적인 git의 pull 조건은 다음과 같다.

 

현재 local 저장소(staging area를 뜻한다.내 컴퓨터의 저장소를 뜻하는 것이 아님. add한 상태가 staging area에 변경사항이 올라간 것)

보다 remote 저장소에 추가 commit 내용이 있을 경우 -> 이 때 remote에만 변경사항이 있을 수 있고 local과 remote 둘다 변경사항이 있을 수 있다. local만 변경사항이 있는 경우는 문제되지 않는다. 그냥 push가 가능.

remote에만 변경사항이 있을 때는 그냥 pull을 해오면 되고 둘 다 변경사항이 있을 때 역시 pull 후에 push를 하면 remote의 마지막 commit 내용을 내 local에 당겨온 후 내 변경사항과 함께 push하는 것이다.

 

이것은 하나의 branch만 쭉 사용했기에 가능하다. 즉 history가 같은 branch 하나만을 사용했기에 가능하지만 

history가 서로 다른 branch에서 pull을 받아오려고 하면 에러가 발생한다. 

fatal : fast-... 의 에러가 발생하는데 이는 branch가 정방향일 경우에만 pull을 허용하겠다는 것이다.

 

* fast-foward 방식

master 브랜치에서 feature 브랜치로 분기 후 master의 history에 변경사항이 없이 새로 분기한 브랜치에서만 수정, 변경이 일어날 시에는 feature branch를 pull하는 것이 가능하다.

 

 

* non fast-foward 방식

그러나 이와 같이 서로 같은 지점에서 분기했더라도 서로 다른 history를 가지게 되면 정방향(fast-foward)가 아니게 되므로 master에서 feature로, feature에서 master로 pull할 수 없게 된다. 따라서 pull 방식을 새로 명시해줘야만이 병합이 가능하다.

따라서 git에서는 3가지 방식 중 하나의 방법으로 pull 방식을 변경하라고 권장한다.

git config pull.rebase false 혹은 git config pull.rebasae true를 선택 시 pull이 가능하다.

단, 이 때 fast foward 방식을 해제하지 않으면 안될 수 있기 때문에 

git config --unset --global pull.ff 의 명령어로 fast-foward 의 pull 방식을 해제하는 것이 좋다.

 

 

 

 

 

 

 

출처 : https://wooono.tistory.com/692