2011-02-24 2 views
4
현재 브랜치로 C로, 다음과 같은 개정 그래프가 있다고 가정

:왜 자식은 원래의 것과는 다른 SHA1을 만들었습니까?

c a 
\/
    b 

git rebase --onto a b은 다음과 작성

 c 
/
    a 
/
b 

과에 그래프를 반환 git rebase --onto b a :

c a 
\/
    b 

그러나 두 재편성 전에 c의 새 SHA1은 c의 이전 SHA1과 다릅니다. 왜 이런 경우입니까?

답변

7

커밋의 SHA1은 메타 데이터를 포함하여 커밋에 대한 모든 사항에 의존합니다. 특히 커밋 타임 스탬프에 따라 다릅니다. 두 번 rebase 된 커밋은 새로운 타임 스탬프를 가지므로 새로운 SHA1을 갖습니다.

(원래 작성된 "저자 날짜"및 실제 커밋이 기록 된 "커미터 날짜"가 있음을 유의하십시오. 후자 만 변경되었습니다. 직접 확인하려면 git log --pretty=fuller을 사용하거나 gitk에서 커밋을보세요.

+0

흥미 롭습니다. 나에게 혼란 스러웠던 점은 rebasing이 수행되고있는 새로운베이스를 지나치는 추가 커밋이 없었을 때 SHA1을 변경하지 않는다는 것이 었습니다. 새로운 기반을 넘어선 추가 작업이 있다면 새로운 커밋을 만들어야하고 따라서 새로운 타임 스탬프가 필요합니다. – jonderry

+0

@ jonderry : rebase는 지능이 있어도 아무 것도하지 않을 정도로 충분히 지능이 있다고 생각합니다. – Cascabel

+1

* 역사 *만큼 타임 스탬프를 지적하지 않겠습니다. 커밋에 부모가 있고 해시에 포함되어 있습니다. 부모가 변경되면 커밋이 변경됩니다. 부모가 변경되지 않고 커밋에 대한 다른 변경 사항이 없다면 반드시해야 할 일이 없습니다. – Dustin

관련 문제