Git: Como listar commits neste branch, mas não de branches fundidos

92

Suponha que seu histórico de git commit seja assim:

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

É possível ter git list apenas os commits no master, AF? Em outras palavras, se o commit estava em um branch mesclado, eu não quero que seja mostrado.

wch
fonte
2
Então, como o git saberia de qual ramo De Zera parte do branch mesclado?
Romain de
2
Quando mesclados do master, os master commits anteriores são os primeiros pais na mesclagem. git logpermite exibir apenas os commits com --first-parent, para que você obtenha as coisas certas
CharlesB

Respostas:

134

git logtem opção --first-parent, então você não terá topichistórico.

Quando mesclados master, os mastercommits são os primeiros pais a serem mesclados. O log do Git permite exibir apenas os commits com --first-parent, para que você obtenha as coisas certas.

CharlesB
fonte
25
+1 --first-parentfaz :) combinado com --no-mergesvocê pode ocultar os commits de mesclagem
c00kiemon5ter
Eu votei, mas ainda parece excessivo em comparação com a minha resposta
UpAndAdam
22

TLDR :git log origin/master --no-merges dará a você um log de mestre e excluirá quaisquer confirmações mescladas (neste caso x, y, z)

Pontos Originais

Há outra maneira geral de fazer isso que não depende de --first-parent qual será útil em certas situações .. usando os filtros de exclusão de ramificação

git log origin/topic ^origin/master Isso lhe dará um log de origin/topic com todos origin/masteros commits removidos.

você também pode adicionar --no-merges que irá ocultar os commits de mesclagem que você pode ou não desejar.

Outra dica útil é usar em shortlogvez delog que lhe dará mais um resumo abreviado que pode ser útil para notas de lançamento ou comunicação do que está em um branch.

Atualizar
Depois de reler isto, você realmente desejaria quase o inverso do que eu postei; no entanto, isso acabaria excluindo tudo o que está em master e foo ( git log origin/master ^origin/foo). No entanto, você também pode obter o que deseja (ocultar todos os commits que fazem parte dos merges) comgit log origin/master --no-merges

UpAndAdam
fonte
0

A resposta de Charles funciona para mim.

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

Mas se você estiver usando qualquer interface de usuário gráfica para suas atividades Git como Git Extension, SourceTree, Tortoise Git

Depois, há opções diretas para verificar o primeiro pai em suas ferramentas. Pensei em adicionar esta resposta à lista, pois a maioria das pessoas acha a Interface Gráfica fácil. e você pode escolher diretamente todos os commits daquele branch em particular da ferramenta, se necessário.

Anexei o exemplo de duas ferramentas, seria semelhante para outras ferramentas também: [Eu blured o nome de usuário, nome do repo git, pois este é um repositório privado, mas ainda assim você pode ter uma ideia de como usar o primeiro pai a partir de ferramentas ]

  1. Extensão Git
    • Abra a extensão Git -> Verifique o branch de recursos que você deseja ver os commits, há uma opção para selecionar os primeiros commits conforme mostrado na imagem:

insira a descrição da imagem aqui

  1. Tortoise Git
    • Abra a pasta do repositório -> Clique em Mostrar logs do Tortoise Git -> Faça check-out do branch e selecione os primeiros commits como mostrado na Imagem

insira a descrição da imagem aqui

KushalSeth
fonte
-3

Isso não funciona?

git log master
git log --stat master
Stefan Kendall
fonte
Não, esses não funcionam. O commit de mesclagem tem dois pais; tudo o que vem de ambos os pais está no branch 'master'.
GoZoner