원격 마스터를 로컬 지점에 병합하는 방법


238

다른 사람의 프로젝트에서 분기 한 프로젝트의 로컬 분기 ( "configUpdate")가 있으며 많은 변경 작업을 수행 한 후 변경 사항을 로컬 분기에 병합하려고합니다.

난 노력 했어

git pull --rebase origin configUpdate

그러나 최신 변경 사항을 파악하지 못했습니다. 두 가지를 어떻게 병합 할 수 있습니까? (또한 보너스 포인트의 경우 pull --rebase명령으로 무엇을 했습니까?)


답변:


354

기능 분기 (예 :)에서 다음을configUpdate 실행하십시오.

git fetch
git rebase origin/master

또는 더 짧은 형태 :

git pull --rebase

이것이 작동하는 이유 :

  • git merge branchname분기에서 새 커밋을 가져 와서 branchname현재 분기에 추가합니다. 필요한 경우 자동으로 "병합"커밋을 맨 위에 추가합니다.

  • git rebase branchname분기에서 새 커밋을 가져 와서 branchname변경 사항 아래에 삽입합니다. 보다 정확하게는 현재 브랜치의 히스토리를 수정하여의 branchname변경 사항과 함께 팁을 기반으로합니다 .

  • git pull기본적으로와 동일합니다 git fetch; git merge origin/master.

  • git pull --rebase기본적으로와 동일합니다 git fetch; git rebase origin/master.

그렇다면 왜 git pull --rebase보다 사용하고 싶 git pull습니까? 다음은 간단한 예입니다.

  • 새로운 기능에 대한 작업을 시작합니다.

  • 변경 사항을 푸시 할 준비가 될 때까지 다른 개발자가 여러 커밋을 푸시했습니다.

  • 당신이 경우 git pull(병합을 사용하는), 변경 사항이 새로운 커밋에 의해 매장 될 것이며, 자동으로 생성 된 병합에 추가하여 커밋합니다.

  • 당신이 경우 git pull --rebase대신, 자식은 빨리 감기 마스터가의 업스트림 것, 그 다음 상단에 변경 내용을 적용합니다.


올바른 지점 에서이 작업을 수행했지만 로컬 파일과 원본 프로젝트의 원격 마스터 지점 사이의 차이점을 여전히 볼 수 있습니다 (모든 것이 최신 상태라고 말하더라도!) 프로젝트를 잘못 설정했을 수 있습니까? 확인할 방법이 있습니까?
Martyn

1
@Martyn : 차이점은 로컬 변경 사항이어야합니다. 원격 분기의 다른 분기를 만들고 해당 분기에 올바른 파일 내용이 있는지 확인하십시오.
ZeissS

4
나는 이것이 오래된 대답이라는 것을 알고 있지만 리베이스 대신 MERGE를 선호 할 수 있습니다. 나중에 일부 변경 사항이있는 원격 리포지토리에 병합해야하는 경우 리베이스를 수행하지 않으려 고합니다.
Domino

1
어떻습니까 (현재 분기 configUpdate에 있다고 가정) ... git pull은 기본적으로 git fetch와 동일합니다. git merge origin / master. <-참이 아님
Chris

@Chris : 어떤 의미에서 그렇지 않습니까? 업스트림으로서의 원산지 / 마스터의 가정? 또는 git pull이 변경 되었습니까?
Joey Adams

81

나는 그것을 발견했다 :

$ git fetch upstream
$ git merge upstream/master

6
그래서, 당신이 이미 그것을 이해하지 못하면, 포크를 가리키고 pull --rebase있었기 때문에 작동하지 않았습니다 origin. 당신이했다면 그것은 효과가 있었을 것이다 git pull --rebase upstream/master.
Karl Bielefeldt

3
시도 : git merge origin / master
Chris

가져 오기가 누락되었습니다.이 답변으로 해결되었습니다.
nurettin

38

현지 지점으로 전환

> git checkout configUpdate

원격 마스터를 지점에 병합

> git rebase master configUpdate

충돌이있는 경우이를 수정하고 충돌 한 각 파일에 대해 명령을 수행하십시오.

> git add [path_to_file / conflicted_file] (예 : git add app / assets / javascripts / test.js)

리베이스 계속

> git rebase-계속


이 질문에 차이가 있다고 생각되면 차이를 조사하는 데 시간을 허비하는 대신 rebase를 사용하는 것을 두려워하지 마십시오
Serge Seletskyy

13

git rebase가 나를 위해 작동하지 않는 것 같습니다. git rebase 후, 로컬 브랜치에 변경 사항을 푸시하려고 할 때 오류가 계속 발생합니다 ( "힌트 : 현재 브랜치의 끝이 원격 상대방 뒤에 있기 때문에 업데이트가 거부되었습니다. 원격 변경 사항을 통합하십시오 (예 : 'git pull). .. ')) 다시 당기기 전에. ") git pull 후에도. 마침내 나를 위해 일한 것은 git merge였습니다.

git checkout <local_branch>
git merge <master> 

나와 같은 초보자라면 git merge vs git rebase에 대한 좋은 기사가 있습니다. https://www.atlassian.com/git/tutorials/merging-vs-rebasing

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.