2012-10-05 8 views
1

커밋의 데이터에 의해 SHA가 생성 된 경우 Git은 두 커밋이 동일한 지 알 수 있습니다.왜 Git에서 임의의 SHA를 생성합니까?

이렇게하면 rebase와 Generate이 실제로 같지만 Git에서는 SHA가 다르므로 서로 다르다고 생각할 때 문제가 해결됩니다.

이 논리가 맞습니까? 아니면 뭔가 빠졌습니까?

+6

SHA는 정의에 따라 임의적이지 않습니다. 이것은 입력의 결정 론적 기능입니다. 그것이 다르다면 입력이 달라졌 음을 의미합니다. –

+2

커밋의 데이터는 트리의 SHA를 생성하는 데 사용됩니다. 'git cat-file -p sha'를 커밋의 sha에 사용하면 트리의 sha가 보입니다. 이것은 내용에 의해서만 결정됩니다. –

답변

13

커밋의 SHA에는 상위 SHA 커밋이 포함됩니다. 그래서 커밋 자체가 변경되지 않더라도 리포지토리가 변경되는 이유입니다. 부모 변경 (리베이스의 전체 지점) 때문입니다.

5

정말 커밋 된 경우 동일한 임의의 SHA를가집니다.

임의의 SHA가 사용되었다고 가정하면 ... diff의 관점에서 커밋이 동일하다면, 시간, 누가 만든 지, 이전에 diff를 적용했는지에 따라 커밋은 여전히 ​​다릅니다 .

+1

시간을 리베이스 할 때 작성자와 커미터는 변경되지 않습니다. 상위 커밋 만 변경됩니다. –

+1

그래서 SHA는 무작위가 아닙니다. –

관련 문제