2014-12-15 3 views
3

feature/x이라는 두 가지 브랜치가있는 프로젝트가 있습니다. 기능/x 나는 마스터에 병합 될 새로운 기능을 개발 중입니다.다른 커밋이 완료된 후 git rebased branch에서 커밋을 제거하십시오.

실수로 기능/x에서 마스터에 기반한 리베이스 조치가 수행되고 푸시됩니다. 게다가 다른 커밋은 완료되었고 feature/x으로 푸시되었습니다.

그래서 다른 해시로 표시된 "동일한 커밋"을 포함하는 두 개의 가지가 있습니다. 마스터

A -- B -- C -- D [master] 
\ 
    E -- F -- G -- H -- I [feature/x] 
C

D 각각 기능/XFG과 같은 커밋 (리베이스)이다.

나는 HI을 유지 기능/X에서 FG을 제거하고 싶습니다. 내가 어떻게 해? 내가 기능/X 그러나 그 쓸모없는 (중복)에서

git revert F G 

커밋 되돌릴 생각하고

은 역사에 남아 커밋합니다. 더 좋은 방법이 있는지 알고 싶습니다. 체크 아웃 feature/x, 그리고

git rebase -i E 

다음 당신이 편집하라는 메시지가있는 REBASE 스크립트에서 F, G에 대한 행을 삭제하십시오

+0

여기에서했던 것처럼 왼쪽에 나뭇 가지에 레이블을 지정해서는 안됩니다. [이 답변] (http://stackoverflow.com/questions/25488138/move-initial-commits-off-master-to-another-branch-in-git/25490288#25490288) 상단을 참조하십시오. – Jubobs

+1

@Jubobs 완료, 감사합니다 – bato

답변

5

가장 간단한 방법은 대화 형으로 리베이스하는 것입니다. 이것은 당신이

git rebase --onto E G feature/x 

과 같은 일을 할 수

master -> A -- B -- C -- D 
        \ 
feaure/x ->  E -- H' -- I' 
        \ 
(orphaned)   F -- G -- H -- I 

처럼 보이는 당신의 지점을두고 생성하지만 대화 형 방법 (I 온라인에 인수 순서를 지켜 볼 수밖에 없었습니다 기억하기 훨씬 쉽다 도움).


이전 커밋은 여전히 ​​존재하며 복구 가능하지만 아무 것도 언급하지 않으면 결국 가비지 수집됩니다.

+0

괜찮아요하지만 그 이후 강제 옵션으로 밀어해야합니까? – bato

+2

'feature/x'가 원격 저장소에 푸시 된 경우에만. –

+0

@Zeeker 예 그렇습니다 : ( – bato