2014-11-27 2 views
3

은 간단하게, 내가 같이했던 커밋 현재 커밋 존재한다.변화는

A------B2-------C 

가능합니까?

솔루션의 역사 :

난 그냥 내 일 기록을 추가했다.

$ git log 
commit b671c70b C 
commit f4acdc2b B 
commit 56f38939 A 

$ git checkout f4acdc2b 

그리고 나는 - amend 옵션으로 커밋되었습니다.

$ git commit -amend 
$ git log 
commit e2fd729 B' 
commit 56f3893 A 

지금, 그것은 다음과 같이되었다 : 대화 형 편집기를 엽니 다 '

$ git checkout b671c70b 
$ git rebase -i 56f38939 

을 B로 B를 리베이스에

A------B-------C 
     \ 
     \ 
      B' 

pick f4acdc2b B 
pick 56f38939 A 

단지 라인 pick f4acdc2b을 제거 , 저장하고 종료하십시오. 오류 error: could not apply b671c70b... C가있는 경우

는 편집은 모든 충돌을 병합하고,

$ git add . 
$ git rebase --continue 

$ git log 
commit 914c6bc C' 
commit 56f3893 A 

$ git checkout 914c6bc 
$ git rebase e2fd729 
$ git log 
commit 5c65190 C'' 
commit e2fd729 B' 
commit 56f3893 A 

지금, 그것은 다음과 같습니다. (당신이 사라 B2를 원하기 때문에, 실제로 A의 상단에)

A------B'-------C'' 
+0

리베이스를 통해 B2와 C 모두에 대한 SHA를 변경해야합니다. –

답변

2

대화식 B2의 상단에 지점을 리베이스 수 :

git checkout yourBranch # which references C) 
git rebase -i A 
# drop B 

줄 것 그 :

A------B2'-------C' 

(C'은 부모가 변경 되었기 때문에 다른 SHA1이있는 C 임)
(부모도 변경 이후 B2에 대한 동일 주석)

+0

그러나이 경우'B'는 역사에 남아있을 것입니다. 결과 저장소는'A ------- B ------ B2 ------- C ''처럼 보일 것입니다. 그렇지 않습니까? –

+0

@ RenéLink True : rebase의 대화 형 부분을 추가하기위한 답을 편집했습니다 – VonC

3

이 완전히 당신이 B2ACB2를 다시 통합해야 B를 제거합니다.

git checkout C 
git rebase B2 

이것은

을 (새로운 커밋입니다 C '를 참고) 그러나 지금 당신은 여전히 ​​역사에서 커밋 BB2

A-------B------B2-------C' 

위에 지점 C을 rebases. 대화 형 리베이스로 제거 할 수 있습니다.다만, 라인 pick 05c98ef B을 제거 저장하고 종료 대화 형 편집기

pick 05c98ef B 
pick e31d9f0 B2 
pick 5d30d05 C 

를 엽니 다

git rebase -i A 

. 이 후 B이 삭제되고 내역은 다음과 같습니다.

A------B2'-------C'' 
+0

오, 감사합니다. 나는 B를 제거하는 방법을 조사해 왔습니다. 잘 작동합니다. –