2010-06-11 5 views
8

수십주가 넘는 분기와 병합으로 수 주일 동안 작업 한 후, 내 노트북과 직장 및 집에서 내 데스크탑에 대한 내 경력은 다소 복잡해졌습니다. 예를 들어, 나는 fetch를 한 후에 origin/master와 master를 병합했다. 내가 자식 쇼 가지를 수행 할 때 지금, 결과는 다음과 같다 :git rebase를 사용하여 뒤얽힌 히스토리를 정리하는 방법

 
! [login] Changed domain name. 
! [master] Merge remote branch 'origin/master' 
    ! [migrate-1.9] Migrating to 1.9.1 on Heroku 
    ! [rebase-master] Merge remote branch 'origin/master' 
---- 
- - [master] Merge remote branch 'origin/master' 
+ + [master^2] A bit of re-arranging and cleanup. 
- - [master^2^] Merge branch 'rpx-login' 
+ + [master^2^^2] Commented out some debug logging. 
+ + [master^2^^2^] Monkey-patched Rack::Request#ip 
+ + [master^2^^2~2] dump each request to log 
.... 

나는 자식 REBASE 이것을 정리하고 싶습니다. 나는이 목적을 위해 새로운 브랜치 인 rebase-master를 만들었고,이 브랜치는 일반적인 조상 인 인 git rebase를 시도했다. <. 그러나 많은 충돌을 해결해야하며 branch rebase-master에 대한 최종 결과는 이미 마스터에서 해당 버전과 일치하지 않으며 이미 테스트를 거쳐 작동합니다!

나는 어딘가에 해결책을 찾았지만 더 이상 찾을 수 없다고 생각했습니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까? 또는 내가 이미 합병 한 불필요한 가지를 삭제하기 시작할 때 이러한 복잡한 RE 명칭이 사라질 것인가?

나는이 프로젝트의 유일한 개발자이기 때문에 영향을받을 사람은 아무도 없습니다. 그게 아니라

git rebase --interactive 

그러나 다시를 :

+9

;-) 철학 참고 : 역사가 뒤얽힌다. 그것은 사실입니다. 그걸 극복해라. –

답변

5

정상적인 과정은 당신이 지점 (A REBASE 로컬로 만든 새에 의해 원격 역사를 교체)를 밀어 강제 할 수 REPOS를 위해 수행하는 것입니다 당신이 당신의 repos에서 끌어 당기는 유일한 사람인 경우에 유효합니다, 그리고 심지어 당신은 재 작성된 새로운 리모트 트래킹 것들에 당신의 로컬 브랜치 중 일부를 재 초기화해야 할 것입니다.

rebase 세션에서 필요한 히스토리 종류를 얻기 위해 trimming Git commits and squash history을 사용할 수 있습니다.

+0

도 참조 http://stackoverflow.com/questions/2719579/howto-add-a-changed-file-to-an-older-not-last-commit-in-git/2719631#2719631 – VonC

+0

음 ... 리모컨에서 당기지 않고도 충분히 유효합니다. 당신은 쉽게 rebase-i (또는 기본적으로 거의 모든 것) 로컬 브랜치, 원격 브랜치, 커밋을 할 수있다. – xenoterracide

10

복잡한 병력을 정리하는 가장 좋은 방법은 병력을 선형으로 유지하는 것입니다. 빨리 감기 이외의 병합을 피함으로써 그렇게 할 수 있습니다.

작업 흐름이 이렇게됩니다.

$ git checkout -b foobranch 
<do stuff> 
$ git commit 
<do stuff> 
$ git commit 
... 

분기를 마스터에 통합 할시기가되면 병합하지 마십시오. 대신이 분기를 마스터에 대해 리베이스하십시오. 이렇게하면 가지가 더 이상 모양처럼 보이지 않게되지만, 나무 꼭대기에서 더 많이 성장하게됩니다. rebase 중에 병합 충돌을 해결합니다.

$ git fetch origin 
$ git rebase origin/master 

이제 분기를 마스터에 병합하십시오. 이것은 빨리 감기 병합이 될 것입니다.

$ git checkout master 
$ git merge foobranch 

이제 작업을 업스트림으로 푸시하십시오.

$ git push 
관련 문제