원격 마스터로 로컬 브랜치를 리베이스하는 방법


932

원격 저장소의 마스터 브랜치에서 복제 된 프로젝트가 있습니다 remote_repo. 새 지점을 만들고 해당 지점에 커밋합니다. 다른 프로그래머들은 remote_repo마스터 브랜치로 푸시했습니다 .

이제 지점 RB를 remote_repo마스터 에 리베이스해야합니다 .

이것을하는 방법? 터미널에 어떤 명령을 입력해야합니까?


14
나에게이 질문은 "with"가 어느 방향 으로든 rebasing을 의미 할 수 있기 때문에 모호하다. 내가 의도가 당신의 지점을 리베이스하는 것을 볼 응답을 살펴보면 리모트 마스터가 아닌 다른 방법으로 주위. 누군가가 아래 답변을 따르고 그들이 원하는 것을 반대로 얻는 경우를 언급합니다.
Glenn Lawrence

8
@GlennLawrence 의견을 추가하는 것보다 원래 질문을 편집하는 것이 낫다고 생각합니다. 이것은 또한 stackoverflow에 의해 권장됩니다. RB가 마스터의 역사에 의존하기 때문에 마스터를 RB에 리베이스하는 것은 어쨌든 실패 할 것입니다.
다니엘 쿨만

답변:


1244

먼저 업스트림 리포지토리에서 새 마스터를 가져온 다음 작업 브랜치를 리베이스하십시오.

git fetch origin            # Updates origin/master
git rebase origin/master    # Rebases current branch onto origin/master

업데이트 : Paul Draper의 대답 을 참조하여 더 똑같은 작업을 수행하십시오. 최근 Git 버전은 위의 두 명령과 동일한 작업을 수행하는 간단한 방법을 제공합니다.


16
이것은 실제로 질문을 받았다 무엇을하는 유일한 대답이다
kayaker243

5
아니요, Paul Drapers의 답변과 동일하지만 긴 형식으로 생각합니다.
erik

7
@erik 폴 드레이퍼는 kayaker243의 발언 후 약 반 년 (이 답변 후 거의 2 년 후)에 자신의 답변을 썼습니다.
Frerich Raabe

3
나는 다음을 얻는다 : Your branch and 'origin/b1' have diverged, # and have 3 and 2 different commits each, respectively.다른 git pull것이 필요한 것처럼 보인다 . 이것이 맞습니까? 아니면 여기에 뭔가 빠졌습니까?
Dror

2
@RGC 아니요, git rebase master두 번째 명령 ( git rebase origin/master) master과 동일한 작업을 수행하지 않으며 origin/master다른 커밋을 가리킬 수 있습니다 (특히 첫 번째 명령이 git fetch origin이므로 수정 될 수 있음 origin/master).
Frerich Raabe

812
git pull --rebase origin master
# where --rebase[=(false|true|merges|preserve|interactive)]

19
(Frerich의 답변과 동일)
Paul Draper

12
Frerich의 답변과 약간 다르지 않습니다. 원점 마스터에서 로컬 마스터로 변경 사항을 커밋하는 반면 Frerich의 답변은 로컬 마스터를 그대로 둡니다. (pull vs. fetch)
Jimmy Huch

7
Frerich의 답변에서 rebase는 로컬 마스터를 수정합니다. 끌어 오기 --rebase는이 REBASE 다음에 인출과 같은 일
인신 공격

9
참고로 대화식 리 git pull --rebase=interactive origin master
베이스를

14
@adhominem -git-pull documentation을 확인했는데 로컬 마스터가 수정되었다는 주장을 뒷받침하는 것을 볼 수 없습니다. 내가 이름이 지정된 devrun git pull --rebase origin master에 있고 run 인 경우 branch만이 아니라 dev수정 master됩니다. --rebase플래그 문서는에 시도하지한다고 rebase the current branch on top of the upstream branch after fetching현지 추적 가지를 수정하는 방법에 대한 아무것도.
Monica Monica 2331977

226

지점에 변경 사항을 커밋 한 후 체크 아웃 master하고 당겨서 repo에서 최신 변경 사항을 가져옵니다.

git checkout master
git pull origin master

그런 다음 지점을 확인하고 다음을 변경하십시오 master.

git checkout RB
git rebase master

... 또는 한 줄에서 마지막 두 명령 :

git rebase master RB

로 되돌리려 origin/RB고하면 오류가 발생했을 수 있습니다. 당신이 일하는 유일한 사람이라면 RB강제로 밀어 넣을 수 있습니다.

git push --force origin RB

... git이 적절하게 구성된 경우 다음과 같이하십시오.

git push -f

4
출발지 / RB로 되돌리려 고하면 오류가 발생했을 수 있습니다. RB 작업을 수행하는 유일한 사람이라면 --force origin RB를 git push 할 수 있습니다. 출처 : stackoverflow.com/questions/8939977/…
Joey Baruch

1
아 .. 난 정확히 이거 야 내 "RB"가 올바르게 리베이스되지만 리베이스 후에 푸시하려고 할 때 끝없는 오류가 발생합니다. 푸시-포스 원점 RB와는 별도로 "강제"(비 강제적) 방법이 있습니까? 나는 여기서 Gits 인식을 이해하려고 노력하고 실패합니다.
Motti Shneor

2
@MottiShneor 아니오, 좋은 방법은 없습니다. 다른 사람이 그 동안 지점으로 밀면 변경 사항이 손실됩니다! git commit history에 익숙해지기 위해서는 master를 브랜치에 병합해야합니다. 이는 안전합니다 ( git push없이 할 수 있음 -f).
다니엘 쿨만

109

참고 : 리베이스에 대해 이미 폭 넓은 지식이있는 경우 빠른 리베이스를 위해 하나의 라이너 아래를 사용하십시오. 솔루션 : 작업 지점에 있고 작업중인 유일한 사람이라고 가정합니다.

git fetch && git rebase origin/master

충돌을 해결하고, 코드를 테스트하고, 변경 사항을 커밋하고 원격 지사에 적용하십시오.

                            ~:   For noobs   :~

다음 단계는 git rebase번거 로움없이 새로운 사람에게 도움이 될 수 있습니다.

1 단계 : 이 시점에서 YourBranch에 커밋 및 변경 사항이 없다고 가정합니다. 우리는 YourBranch를 방문하고 있습니다.

git checkout YourBranch
git pull --rebase

어떻게 된 거예요? 지점에서 작업하는 다른 개발자의 모든 변경 사항을 가져 와서 그 위에 변경 사항을 적용합니다.

2 단계 : 충돌이 있으면 해결합니다.

3 단계 :

git checkout master
git pull --rebase

어떻게 된 거예요? 원격 마스터에서 모든 최신 변경 사항을 가져오고 원격 마스터에서 로컬 마스터를 리베이스합니다. 나는 항상 원격 마스터를 깨끗하게 유지하고 준비합니다! 또한 로컬에서 마스터 또는 지점에서만 작업하는 것을 선호합니다. git 변경이나 커밋을 얻을 때 까지이 작업을 수행하는 것이 좋습니다. 참고 : 로컬 마스터를 유지 관리하지 않는 경우이 단계는 필요하지 않으며 대신 로컬 지점에서 직접 원격 마스터를 가져와 리베이스 할 수 있습니다. 처음에 한 단계에서 언급했듯이.

4 단계 : 충돌이 있으면 해결합니다.

5 단계 :

git checkout YourBranch
git rebase master

어떻게 된 거예요? 마스터 리베이스

6 단계 : 충돌이있는 경우 충돌을 해결합니다. git rebase --continue해결 된 충돌을 추가 한 후 리베이스를 계속 하려면 사용하십시오 . 언제든지 git rebase --abort리베이스를 중단하는 데 사용할 수 있습니다 .

7 단계 :

git push --force-with-lease 

어떻게 된 거예요? 원격 YourBranch에 변경 사항을 푸시합니다. --force-with-lease리베이스하는 동안 다른 개발자로부터 YourBranch에 대한 다른 수신 변경 사항이 있는지 확인합니다. 이것은 강제 푸시보다는 매우 유용합니다. 들어오는 변경 사항이있는 경우 변경 사항을 푸시하기 전에 변경 사항을 가져와 로컬 YourBranch를 업데이트하십시오.

변경 사항을 푸시해야하는 이유는 무엇입니까? 적절한 리베이스 후 또는 충돌이 해결 된 경우 원격 YourBranch에서 커밋 메시지를 다시 작성하려면? 그런 다음 로컬 저장소에서 해결 한 변경 사항을 YourBranch의 원격 저장소로 푸시해야합니다.

야후! 리베이스 작업이 성공적으로 완료되었습니다.

당신은 또한보고 할 수 있습니다 :

git checkout master
git merge YourBranch

언제 그리고 왜? 본인과 다른 공동 개발자가 변경 한 경우 지점을 마스터로 병합하십시오. 나중에 동일한 지점에서 작업하고 싶을 때 마스터와 함께 YourBranch를 최신 상태로 만듭니다.

                            ~:   (๑ơ ₃ ơ)♥ rebase   :~

이에 대한 내용 : "마스터에서 모든 최신 변경 사항을 가져오고 최신 마스터에서 마스터를 리베이스합니다.". 마스터를 마스터로 리베이스? 최신 마스터를 뽑아야합니까?
John Little

@JohnLittle 지적 해 주셔서 감사합니다. 내 말은 Pulls latest changes from remote master to local master. I always prefer keeping remote master clean and release ready always!. 설명을 업데이트하겠습니다.
bh4r4th

21

1 단계:

git fetch origin

2 단계:

git rebase origin/master

3 단계 :( 충돌시 수정)

git add .

4 단계 :

git rebase --continue

5 단계 :

git push --force

5
시작할 지점에 대한 설명이 없습니다. 좋은 대답이 아닙니다.
Karl Morrison

12

1. 먼저 마스터 업데이트 ...

git checkout [master branch]
git pull [master branch]

2. 이제 마스터 브랜치로 소스 브랜치 리베이스

git checkout [source branch]
git rebase [master branch]
git pull [source branch] (remote/source branch)
git push [source branch]

소스 분기가 아직 원격에 없으면 다음을 수행하십시오.

git push -u origin [source branch]

"et voila ..."


이 답변의 단계별 특성을 좋아합니다. 정확히 무슨 일이 일어나고 있는지 분석하는 데 도움이됩니다.
Dave Liu

6

git fetch origin master:master 확인하지 않고도 최신 버전의 마스터를 가져옵니다.

따라서 필요한 것은 다음과 같습니다.

git fetch origin master:master && git rebase master 👌


하지 않습니다 git fetch너무 그것을 확인하지 않고 마스터를 업데이트? 그것은 제외 git fetch하지 않는 git merge업데이트는 바로? 우리가 체크 아웃 master하면 최신 업데이트가 없습니다. 그래서, 기능 분기 동안 할 짧은 아닌 git fetch다음 git rebase origin/master? 우리는 할 수 없어 git rebase master그에서 리베이스하려고하기 때문에 master작업 공간에서, 우리는 필요 origin/master병합되지 않은에서 얻을 수 있지만, 지역 앉아.
Noitidart
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.