2017-04-06 7 views
1

를 저지하지만 지금 커밋의 순서가 다른 방법 :이전 커밋 스쿼시와 두 개의 커밋 날에 의해 잇달아 만들어졌다 때 최근의 병합 내가</p> <pre><code>git rebase -i origin/{branch}~1 {branch} </code></pre> <p>로 스쿼시 수

  1. 이는 원점으로 밀렸다 ... : 지점 github.com의 마스터를 병합 :
  2. 상류와 병합 커밋 내.

이제 git log와 my pull 요청은 원래의 커밋과 병합 커밋 모두를 보여줍니다. 그러나 위의 rebase 명령은 업스트림에서 온 다른 커밋 만 표시하며 어떤 이유로 든 병합하지 않습니다.

그래서 어떻게 자식 rebase가 그들을 보여주지 않으면 커밋 할 수 있습니까?

답변

0

Rebase 정상적으로 병합 커밋을 완전히 제거합니다. 이유는 간단합니다. rebase 복사본을 복사본으로 변경 한 다음 변경 내용을 적용하여 새로운 베이스 (따라서 "re-base"이름)에 적용합니다. 일단 복사, 당신은 빛나는 새로운 사본에 찬성 원래 커밋을 "포기"

... <--B <--C <-- master 
     \ 
     D <--E <--F <-- branch 

가된다 :

D' 등등 D의 빛나는 새 복사본이며,
... <--B <--C <-- master 
      \ 
       D' <--E' <--F' <-- branch 

. 즉, REBASE은 무엇 B에서 D에 달라, 무엇을, D에서 E에 달라 어떤 것은 E에서 F으로 다르다 "로 만들어 버리는 등 D-E-F 등 커밋의 캐릭터를 수집합니다. 힘내 다음 같은 변경을 적용 할 수 있습니다 CD'를 만들기 위해, 다음 등 D'D 일등석 E 변경 내용을 다시 적용합니다.

그것은 리베이스 일반적 현명 어떤 출판 (밀어) 당신이 모든 사람들과이 문제를 사전에 준비하지 않는 한, 커밋 그렇지 않은 사람은 푸시 된 저장소를 공유하므로 모자를 이해하고이를 조정할 수 있습니다. 본질적으로, 다른 사람들은 입니다.을 사용하면 빛나는 새로운 것을 버리고 있습니다. 그래서 그들은 을 버려야합니다. 반짝이는 새로운 것들을 선호한다면, 그렇지 않으면 옛/더러운/부러진/무엇이든지 커밋을 가져올 것입니다. 그들이 가지고있는

병합 커밋 변경으로 전환 할 명확한 방법이 없습니다 이전 (또는 부모)이 아니라 하나보다, 커밋 및 변경에 에게 병합 결합 의 결과 각 학부모의 변경 사항. ( 병합을 새로 만들 수는 있지만 매우 까다 롭습니다. 정상적인 대화 형 리베이스와 결합하는 것은 안전하지 않습니다.