2013-02-07 4 views
1

다음 질문이 너무 일반적이지 않기를 바랍니다. Plz telle 만약 그렇지 않다면,이 게시물은 elswhere를 마이 그 레이션 수 있습니다. 그래서이 커밋을 자체적으로 브랜치로 간주 할 수있는이 매우 좋은 doc (10 페이지 아래)을 읽었습니다. 어떤면에서 그렇게 말할 수 있겠습니까? 커밋은 어떻게 지사의 전체 역사를 지원합니까? (수학에 관심있는 사람들의 경우, 어떤 트리를 통해 (소위 지사의 역사를 지원하는) 진동을 생각할 수 있습니까?)분기 자체를 커밋합니까? - git

답변

3

"브랜치"개념에 대한 논의가 너무 복잡하다고 생각하지만, 그다지 중요하지 않습니다.

효과는 모든 커밋이 HEAD가 커밋 인 분기를 나타내며 일반적인 분기와 다른 점은 분기 이름 (커밋의 SHA-1 임)이 불변하다는 것입니다. hash-as-branch-name은 항상 hash-as-commit을 가리 킵니다.

다음 명령을 사용하여 직접 시도하십시오. git checkout 2ae907 (참조는 이전 커밋을 참조하십시오). 다음과 같은 텍스트가 표시됩니다.

참고 : '2a9e07'을 확인하십시오.

당신은 'HEAD'상태에 있습니다. 둘러보고 실험 변경 사항을 적용하고 커밋하고 다른 결제를 수행하여 분기에 영향을주지 않고 의 상태를 만들 수 있습니다.

커밋은 커밋 그래프에 추가되므로 모든 커밋은 모든 이전 기록을 포함하는 하위 그래프의 루트입니다.

+0

네,하지만 부모와의 커밋 사이의 링크와 관련된 데이터가 저장되는 곳은 어디입니까? – Newben

+0

git은 커밋 간의 관계를 저장하기 위해 Directed Acyclic Graph를 구현합니다. DAG가 구현되는 방식은 커밋이 서로 관련되어 있다는 추상적 인 개념을 이해하는 데 중요하지 않습니다. –

+0

@Newben : 모든 커밋은 부모에 대한 참조를 포함합니다. 예를 들면 다음과 같이 볼 수 있습니다. 'git show --format = raw '- 부모 커밋의 ID를 나열합니다. 커밋에는 둘 이상의 부모 (병합 커밋) 또는 없음 (초기 커밋)이있을 수 있습니다. – sleske

1

git에서 커밋에는 항상 그 시점에서 트리의 완전한 히스토리 (부모 커밋에 대한 참조 포함). 그 의미에서, 당신은 그것을 지점으로 생각할 수 있습니다. 유일한 차이점은 분기에 기호 이름이 있으므로 해시로 참조 할 필요가 없다는 것입니다.

+0

그래서 내가 잘 이해한다면, 각각의 '파일'에 대한 각각의 커밋은 연속적인 diff 파일에 대한 참조의 세리에이션 트리를 구성하고, 그 합성은이 '파일'로 이어진다. – Newben

+0

정확하게는 아닙니다. [Pro Git] (http://git-scm.com/book)을 읽으면 나는 당신이 계몽 될 것이라고 확신합니다. –

+0

아마도 커밋은 전체 히스토리가 아닌 그 시점에서 트리의 스냅 샷을 포함한다고 말하는 것이 더 정확할 것입니다. 역사는 하나의 사건이 아니라 일련의 사건으로 정의됩니다. – R0MANARMY