2017-12-12 14 views

답변

1

commit1..commit2은 사람들이 처음 의미하는 것이라고 생각하지는 않습니다. 사실,이 표기법은 commit2 ^commit1의 줄임말입니다. 의미는 다음과 같습니다. 을 제외한 commit2에서 도달 가능한 커밋을 찾고 commit1에 도달 할 커밋을 찾습니다.

"도달 할 수있는"개념은 약간 까다 롭습니다. 나는 "페인트가 빨간색이나 초록색을 일시적으로 저 지르다"고 생각합니다. 빨간색은 중지를 의미하고 녹색은 보통 때와 같이 의미합니다. 우리는 최신 커밋부터 시작하여 거꾸로 작업합니다. 빨간색 페인트는 녹색 페인트를 무시합니다. 정지 된 커밋은 다른 것으로 바뀌어도 중단 된 상태로 있습니다. 우리는 해당 버전 1.0, 1.12.0 (v와 태그)를 발표했다 여기

    tag:v2.0 
        | 
        v 
       J1--J2 <-- release/2 
      /
...--G--H--I--J--... <-- mainline 
     \ 
      H1--H2--H3--H4--H5 <-- release/1 
      ^  ^
       |   | 
      tag:v1.0 tag:v1.1 

:

는 새로운 커밋은 항상 오른쪽에 추가됩니다 이와 같이 그래프를 커밋 고려 각각 H2, H5J2입니다. 일부 이름 mainline 포인트는 J 후 커밋, 그래서 우리는 녹색으로 이름 mainline을 사용하는 경우/그래서 우리는 J에 이르기까지 모든 커밋을 얻을 가서 I, H, G에 뒤로 계속합니다. 우리는 결코 "다시 오른쪽으로"가지 않습니다. 그래서 우리는 어떤 여분의 도형도 결코 페인트하지 않습니다. Jn 또는 Hn은 녹색입니다. 마찬가지로 H2을 빨간색으로 칠하면 H2, 그 다음은 H1, 그 다음은 HG이므로 계속 오른쪽으로 이동하지 않으므로 I 또는 그 이상을 터치하지 마십시오. 권리.

커밋 확인시 v1.0..v1.1이 표시되고 커밋이 H5 인 경우 H4 일 때 H3이 표시됩니다. 그들은 v1.1 aka H5에서 시작하여 초록색으로 칠해졌으며 (v1.0 aka H2부터 시작하여) 빨간색으로 칠한 적이 없습니다. v1.1..v2.0을보고 J2을보고 J1을 입력 한 다음 J을 입력 한 다음 I을 입력하고 H을 입력합니다. 그게 전부 괜찮아요, 아마 당신이 기대하는 것입니다.

그러나이 그래프는 매우 선형입니다. 우리는 그래프의 일부 포크와 병합 동작 있다고 가정하자 :

  G--H 
     / \ 
...--E--F  K--L <-- branchname 
     \ /
      I--J 

을 우리가에서 시작 L을 커밋 선택하고, J에서 중지 할 수 있습니다. 우리는 J 빨강, 그리고 IFE 등등은 모두 빨간색입니다. 그런 다음 우리는 L 녹색, 그리고 K 녹색, 그리고 H 녹색, 그리고 G 녹색 페인트. F은 이미 빨간색입니다 (녹색 뒤에 빨간색으로 표시되면 빨간색으로 덮어 쓰기됩니다).어떤 의미에서 G이 아마도 J보다 이전 임에도 불구하고, 최종 커밋 목록은 L, K, HG입니다. 트릭은 G이 아니고J에 도달 할 수 있다는 것입니다. 힘내는 날짜를 전혀 지키지 않는다. 커밋 그래프의 도달 가능성에 의한 것이다.

도 참조하십시오. my answer에서 List commits between 2 commit hashes in git, 더 일반적으로는 Think like (a) Git을 참조하십시오.

+0

정교한 설명에 감사드립니다. – lebowski