2016-06-24 3 views
1

2 주 전 새로운 브랜치를 만들었습니다. exp이라고합시다. 이 시간 동안 expmaster에 몇 가지 커밋이있었습니다. 이 기간 동안 exp 지금 내 전체 역사를 잃지 않고, 마스터에 exp에서 모든 변경 사항을 얻으려면 masterGit rebase/master가 브랜치에서 마스터로 바뀝니다.

에서 변경 사항이 업데이트되지 않은 (즉, 난 그냥 하나에 master에 커밋하고 싶지 않아요 모든 변경 사항이 아니라 exp의 모든 내 커밋이 master의 기록에 나타납니다.

어떻게 가능합니까? 나는 Rebase에보고했지만 내가 할 때

git checkout exp 
git rebase master 

과정의 끝에서 나는 exp에서, 그리고 난 내가로 밀어 싶어 것처럼 내가 exp에서 만든 모든 커밋을 참조 git statusexp 다시

+0

왜 리베이스? 병합하지 않으시겠습니까? – kan

답변

2

당신의 목표는 master의 역사에 exp에있는 모든 커밋을하고 커밋을 모두 유지하는 것입니다. git merge 또는 git rebase을 사용하든 관계없이이 작업을 수행 할 수 있습니다.

MERGE :

git checkout master 
git pull 
git checkout exp 
git merge master 
git push -u origin exp 

만들기는 최신 master을 끌어와 최신 변경 사항이 너무 2 단계를 수행합니다.

REBASE : 당신이 대안으로 다음 단계를 수행 할 수 있습니다

git checkout exp git pull --rebase origin master git push -u origin exp 

이 과정에서 해당 지역의 master를 업데이트하지 않으려면

:

git checkout master 
git pull 
git checkout exp 
git rebase master 
git push -u origin exp 

주를 그 때 git pull --rebase origin master, 변경 사항은 originmaster 최신 버전을 기준으로합니다. 또한이 명령은 master의 로컬 복사본을 업데이트하지 않습니다.

참고 :git rebase을 사용하는 경우 강제로 밀어 넣기 (git push -f origin exp)해야 할 수도 있습니다.

1

exp 분기를 master으로 병합하는 것이 좋습니다. 당신은 여전히 ​​당신의 모든 역사를 가지고 있으며 보너스로 모든 원래의 커밋 시간을 유지할 것입니다.

git checkout master 
git merge exp 

당신이 정말rebase 옵션으로 이동하려면

는, 당신은 단지 master로 리베이스 exp 지점을 병합해야합니다.

git checkout exp 
git rebase master 

git checkout master 
git merge exp 

참고 : 병합 (첫 번째) 옵션을, 당신은 가지가 아마 갈라 때문에 (병합 커밋 추가)를 노 빨리 감기 병합으로 끝낼 것입니다. GitHub의 pull 요청 사용자 인 경우,이 종류의 병합을 사용합니다. 두 번째() 옵션을 사용하여 동일한 작업을 수행하려는 경우 옵션을 병합 명령에 추가 할 수 있습니다.

git merge exp --no-ff 
관련 문제