Mostrando commits feitos diretamente para um branch, ignorando merges no Git

86

Ao usar o git, existe uma maneira de mostrar os commits feitos para um branch, enquanto ignora todos os commits que foram trazidos pela fusão?

Estou tentando revisar as alterações de código feitas em um branch, ignorando as que fizemos em outros branches que foram mesclados. Sei que é quase impossível mostrar uma diferença dessa maneira, mas gostaria de poder descobrir quais commits eu preciso revisar.

Canal Cat
fonte

Respostas:

123

--no-merges

Ambos os pais têm peso igual em muitos contextos no git. Se você sempre foi consistente ao mesclar outras alterações no, talvez descubra que isso lhe dá o que deseja.

git log --no-merges --first-parent

Caso contrário, você pode excluir commits de outros branches nomeados.

git log --no-merges ^other-branch-1 ^other-branch-2 ^other-branch-3

Se você quiser revisar as mudanças que irá fundir de volta em um branch principal, então a coisa mais fácil a fazer é realizar a fusão em um clone local e então apenas olhar para o diff com o primeiro pai antes de publicar a fusão.

CB Bailey
fonte
Este primeiro comando é excelente em "branch-per-feature adequado" ( plus.google.com/109096274754593704906/posts/R4qkeyRadLR )
Adam Dymitruk
1
Parece que recebo principalmente commits desse branch, mas ainda está mostrando commits que foram retirados do master. Temos tantos ramos que excluir outros seria impraticável.
Canal Cat
@ChannelCat por que não realocar seu branch no outro, então todos os commits estarão no final?
Mark Ingram,
7

Você pode usar git cherrypara isso, ele encontrará commits que ainda não foram mesclados com o upstream, ou commits que estão em um branch, mas não no outro. Então, dados dois branches chamados "your-branch" e "master":

git cherry -v your-branch master

apresentará uma lista de commits em comparação com o id do patch:

+ c3e441bf4759d4aa698b4a413f1f03368206e82f Updated Readme
- 2a9b2f5ab1fdb9ee0a630e62ca7aebbebd77f9a7 Fixed formatting
+ e037c1d90b812af27dce6ed11d2db9454a6a74c2 Corrected spelling mistake

Você pode notar que commits prefixados por "-" são aqueles que aparecem em ambos os branches, enquanto aqueles prefixados por "+" estão disponíveis apenas em seu branch.

Como alternativa, você pode usar:

git log --pretty=format:"%h %s" your-branch..master --no-merges

que irá mostrar uma lista de commits feitos em "seu-branch" que ainda não estão presentes em "master"

Jbochniak
fonte
Como minha tentativa de editar sua resposta foi rejeitada, vou postá-la aqui: em sua última linha do git, deve haver três pontos, não dois, entre os nomes dos ramos. Assim: seu ramo ... mestre
vedranm
@vedranm Você não precisa de 3 pontos, apenas dois ... embora 3 funcione da mesma maneira que 2 funcionam.
Zzzach ...
4

Uma maneira bem hackeada:

git log --graph --oneline --no-merges thebranch|grep '^\*'

fge
fonte