2013-10-18 3 views
3

공유 GitHub 저장소에서 최근 커밋 목록을 표시하려면 git log을 사용하고 싶습니다.힘내 로그 : 모든 부모 목록 만들기

     (master) 
B------Merge1--Merge2--Merge3 
    / / /
- -C1  / /
     - - -C2  /
- - -C3----------C4 

Merge 커밋 병합 된 풀 요구의 결과 인 경우, 그리고 C 커밋이 저장소의 포크에서 오는 :

현재의 역사는 다음과 유사합니다.

git log는 다음과 같이 보여줍니다

git log --oneline master 
    Merge3 
    Merge2 
    Merge1 
    B 

을하지만 난 정말 관심이 무엇 C 커밋이다. git log --graph은 C1, C2 및 C3을 표시하는 유일한 방법입니다.

C1, C2 및 C3을 표시하는 다른 옵션 (--graph 포함하지 않음)이 있습니까?

나는 그 사람 페이지에서 찾을 수있는 유일한 합리적인 것은 --first-parent 인이

git log --oneline --no-merges <...insert magic here...> master 
C4 
C3 
C2 
C1 
B 

처럼 뭔가를 할 수 있도록하고 싶습니다,하지만 난 사용하지 않거나 반전 할 수있는 방법을 찾을 수 없습니다.

답변

2

당신이 당신의 병합을하고 --no-ff 가진 실제 병합으로 끌어하지 않는 경우는 그냥 병합 커밋보고 싶지 않아, 그래서 만약, 신뢰할 수없는 지표가 될 것입니다 분기 끝에 커밋

git log --no-merges --oneline -n 10 # or --since, or something, might do 

커밋 속성을 기반으로 목록으로 돌아 가기까지 rev-list에 내장 된 컷오프 기준이 없다는 것을 결정하려는 경우 출력의 해당 속성을 rev-list 이상으로 필터링하거나 더 일반적으로는 log --pretty=format: 선택, C4를 우회하기로 결정한 방법을 이해할 수 없기 때문에 C1-C2-C4를 얻는 선택된 분기로 이어지는 병합 된 분기의 팁만 나열한 것입니다 ...

#!/bin/sh 
git rev-list --parents "${@-HEAD}" \ 
| sed -n '/^[^ ]* [^ ]* /!q;s///;s/[^ ]*/&^!/gp' \ 
| xargs git log --oneline 

나오지 :

/^[^ ]* [^ ]* /!q  # quit at first rev with less than two parents 
s///     # strip rev and its first parent 
s/[^ ]*/&^!/gp   # append ^! to all other (merged) revs 

^! suffix가 자동으로 부모를 포함하지 않도록 log을 알려줍니다.

+0

답장을 보내 주셔서 감사합니다. rev-list 명령은 많은 수의 줄을 만들어 내며, 모두 'shaX'또는 'shaX shaY'형식입니다.뭔가 sed 표현과 함께 작동하지 않습니다 그러나 그것은 출력을 생성합니다. – Marco

+0

rev-list는 병합 커밋을 "shaX shaY shaZ [...]"로 표시합니다. 질문의 샘플 기록은 세 개의 병합 커밋으로 끝납니다. 설명하는 출력에는 병합 커밋이 전혀 없습니다. 질문에서 "비슷한"이라는 단어가 무엇을 의미하는지, 그리고 "최근"이라는 단어가 무엇인지 명확하게 설명해 주시겠습니까? – jthill

+0

나는 GitHub를 사용하고 코드는 풀 요청을 통해 마스터에 도착한다. 대부분은 병합이지만 일부는 빨리 감기입니다. 내 질문에있는 예제는 인공이지만 실제 repo 기록과 매우 유사합니다. '최근'에 따르면 구체적인 것은 아니지만 출력을 -10으로 제한할지, 아니면 전체 기록을 표시하지 않을지 기꺼이 할 수 있습니다. – Marco

0

가능한 해결책은 --graph 다음 sed 및 grep 마법을 사용하는 것입니다. 이 다소 작동하지만 그것은 해커, git-log 나를 위해 이것을 할 수있을 것이라고 기대했다!

커밋 날짜가 아니라 올바른 순서를 표시하는 데 추가 옵션이 필요하다고 생각합니다.

git log --oneline --graph  \ 
| sed -e 's|[^a-z0-9]*||1' \ 
| egrep -v '^[a-z0-9]+ Merge' \ 
| egrep -v "^$" 

sed은 지점 "ASCII 예술 '그 --graph 모드 출력을 제거한다. 첫 번째 grep은 모든 병합 커밋을 제거합니다. 두 번째 grep은 빈 줄을 제거합니다.