2012-06-06 17 views
7
  : 
      A 
T  /\ 
i  B C 
m  : : 
e  D E 
      \/
|   F 
V   : 

git merge-base B E 두 공통 단어의 공통 조상 인 A을 찾을 수 있습니다. 두 분기가 다시 병합 된 커밋 F을 찾는 방법이 있습니까?두 커밋의 첫 번째 공통된 하위 항목 찾기

+0

thats 멋진 그래프, 어떻게 만들었습니까? –

+1

둘 이상의 "첫 번째"공통 어린이가 있다면? 예를 들어, B와 E의 병합 인 커밋이있을 수 있습니다. – svick

+1

이 자식처럼'git rev-list --children' 결과물을 해킹 할 수 있습니다 : http://stackoverflow.com/questions/1761825/referating-the-child-of-a-commit-in-git를 사용합니다. – ellotheth

답변

0

충분히주의 깊게 읽지 않았습니다.

커밋의 유일한 정보는 부모 (또는 부모)의 ID입니다. 상위 커밋에서 자식을 얻을 수 없습니다 (DAG 인 저장소의 직접적인 부분 임).

더 자세히 살펴보면 - git log에 대한 --ancestry-path 옵션이이를 수행 할 수 있습니다. 주어진 예를 들어 : -

git rev-list --reverse --ancestry-path 28d08e5..006d11d | head -1 
F.을 즉 당신이 다음이 리버스 첫 번째를 선택하면

* 85d26ab When compiling vim, also compile & install gvim 
* 3146e5d Merge remote-tracking branch 'origin/devel' into deve 
|\ 
| * 28d08e5 rebasing-merge: specify all commits explicitly 
* | 006d11d Help 'file' find its magic file 
|/ 
* e68531d (tag: Git-1.7.6-preview20110720) Update submodules 

우리는

git log --oneline --ancestry-path B..E 

를 사용하여이 두 커밋의 모든 아이를 얻을 수 있습니다

내 경우에는 3146e5d를 반환합니다.

0

적응 all.awkthis answer에서 각 참조에 대한 줄 번호도 포함해야합니다. 두 부모가 만났을 때 공통점이있는 참조를 살펴보십시오.

관련 문제