Git : 병합 된 브랜치가 아닌이 브랜치에 커밋을 나열하는 방법


90

git 커밋 기록이 다음과 같다고 가정합니다.

A---B---C---D---E---F master
     \         /
      X---Y---Z topic

마스터, AF에 대한 커밋 만 git list에 표시 할 수 있습니까? 즉, 커밋이 병합 된 브랜치에있는 경우 표시하고 싶지 않습니다.


2
그래서, 어떻게 알고 자식 것이다 DZ병합 된 지점의 일부?
Romain

2
마스터에서 병합되면 이전 마스터 커밋이 병합의 첫 번째 부모가됩니다. git log를 사용하여 커밋 만 표시 --first-parent할 수 있으므로 올바른 항목을 얻을 수 있습니다.
CharlesB

답변:


133

git log옵션 --first-parent이 있으므로 topic기록을 얻을 수 없습니다 .

에서 합병 mastermaster커밋은 병합의 첫 조상이다. Git 로그를 사용하면 --first-parent를 사용하여 해당 커밋 만 표시 할 수 있으므로 올바른 내용을 얻을 수 있습니다.


25
하나는 --first-parent그것을 않습니다 :)과 결합 --no-merges하면 병합 커밋 숨길 수 있습니다
c00kiemon5ter

나는
찬성

22

TLDR : git log origin/master --no-merges마스터 로그를 제공하고 병합 된 커밋을 제외합니다 (이 경우 x, y, z).

원래 포인트

--first-parent어떤 상황에서 도움이 될지에 의존하지 않는 또 다른 일반적인 방법 이 있습니다. 분기 제외 필터 사용

git log origin/topic ^origin/master 그러면의 origin/topic모든 origin/master커밋이 제거 된 로그가 제공 됩니다.

당신이 --no-merges원할 수도 있고 원하지 않을 수도있는 병합 커밋을 숨기는 추가 할 수도 있습니다 .

또 다른 유용한 팁은 릴리스 노트 또는 분기에있는 내용의 통신에 편리 할 수있는 요약 된 요약을 더 많이 제공 하는 shortlog대신 사용 log하는 것입니다.

업데이트
이것을 다시 읽은 후에는 실제로 내가 게시 한 내용의 거의 역을 원할 것입니다. 그러나 master 및 foo ( git log origin/master ^origin/foo) 에있는 모든 항목을 제외하게 됩니다. 그러나 당신은 또한 당신이 요구하는 것을 얻을 수 있습니다 (병합의 일부인 모든 커밋 숨기기)git log origin/master --no-merges


0

Charles의 답변이 저에게 효과적입니다.

git log has option --first-parent --no-merges, so you won't get topic history.

그러나 Git Extension, SourceTree, Tortoise Git와 같은 Git 활동에 그래픽 사용자 인터페이스를 사용하는 경우

그런 다음 도구에서 첫 번째 부모를 확인할 수있는 직접적인 옵션이 있습니다. 대부분의 사람들이 그래픽 인터페이스를 쉽게 생각하기 때문에이 답변을 목록에 추가하려고 생각했습니다. 필요한 경우 도구에서 특정 분기의 모든 커밋을 직접 체리 선택할 수 있습니다.

두 가지 도구의 예를 첨부했습니다. 다른 도구에서도 비슷합니다. [개인 저장소이므로 사용자 이름, git repo 이름을 흐리게 처리했지만 도구에서 첫 번째 부모를 사용하는 방법에 대한 아이디어를 얻을 수 있습니다. ]

  1. Git 확장
    • Open Git Extension-> Checkout the feature branch you want to see the commits, there are a option to select first commits as shown in Image :

여기에 이미지 설명 입력

  1. 거북이 힘내
    • 저장소 폴더 열기-> Tortoise Git에서 로그 표시-> 브랜치를 체크 아웃하고 이미지에 표시된대로 첫 번째 커밋을 선택합니다.

여기에 이미지 설명 입력


-3

작동하지 않습니까?

git log master
git log --stat master

작동하지 않습니다. 병합 커밋에는 두 개의 상위가 있습니다. 두 부모 모두에서 추적하는 모든 것은 '마스터'브랜치에 있습니다.
GoZoner
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.