git - 취소 - 체리 피클 후 rebase가 같은 커밋을 두 번 적용하지 않는 이유는 무엇입니까?



git revert (1)

대답은 git-rebase 의 man 페이지에 있습니다 :

HEAD에서 커밋과 동일한 텍스트 변경을 도입하는 HEAD의 커밋은 생략됩니다 (즉, 커밋 메시지가 다른 업스트림에서 이미 허용 된 패치 또는 타임 스탬프는 건너 뜁니다).

Rebase는 텍스트 변경을보고 다시 브랜치 할 브랜치에 이미 존재하는 커밋을 재생하는 것을 거부합니다.

체리가 한 지점 ( "주제")에서 다른 지점 ( "마스터"라고 함)으로 커밋을 선택하면 해당 커밋의 히스토리가 다시 쓰여지고 해시가 변경되어 새로운 독립 커밋이됩니다.

그러나 이후에 master git에 대해 주제를 rebase 할 때 커밋에 두 번 적용하지 않는 것을 알기에 충분히 똑똑합니다.

예:

A --- B <- master
      \
       \---- C ---- D <- topic

$ git checkout master
$ git cherrypick D

A --- B --- D' <- master
      \
       \---- C ---- D <- topic

$ git checkout topic
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying 'C'

A --- B --- D' <- master
            \
             \---- C' <- topic

이 마술은 어떻게 작동합니까? 예. 어떻게 자식은 C를 D '에 적용해야하지만 D에서 D'를 적용해야한다는 것을 알고 있습니까?





git