Git : 병합 된 브랜치가 아닌이 브랜치에 커밋을 나열하는 방법 기록이 다음과 같다고 가정합니다. A—B—C—D—E—F master

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

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

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



답변

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

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


답변

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


답변

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에서 로그 표시-> 브랜치를 체크 아웃하고 이미지에 표시된대로 첫 번째 커밋을 선택합니다.


답변

작동하지 않습니까?

git log master
git log --stat master