Como vejo as diferenças de confirmação entre as ramificações no git?

341

Estou no ramo X e adicionei mais alguns commits em cima dele. Quero ver todas as diferenças entre o MASTER e o ramo em que estou em termos de consolidação. Eu poderia apenas fazer uma

git checkout master
git log

e então um

git checkout branch-X
git log

e diferencie-os visualmente, mas espero um método mais fácil e menos propenso a erros.

Avery
fonte

Respostas:

324

Você pode obter uma saída visual muito boa de como seus galhos diferem com esse

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative master..branch-X
tom
fonte
13
Isso não mostra diferenças entre os ramos, e é isso que está sendo solicitado.
Pablo Fernandez heelhook
47
git log --oneline --graph --all --decorate --abbrev-commitvai lhe dar uma saída similar em um comando mais curto / mais legível
Pablo Fernandez chave de calcanhar
4
Eu gosto deste:git log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset'
Avery
6
Extremamente complicado.
Shawn Erquhart
12
git log --oneline --graph --all --decorateé suficiente, --abbrev-commitnão é necessário, --onelineé curto--pretty=oneline --abbrev-commit
avmohan 19/11/2015
720

Você pode fazer isso facilmente com

git log master..branch-X

Isso mostrará que você confirma o ramo X, mas o mestre não.

Pablo Fernandez heelhook
fonte
9
Existe uma opção se os dois ramos contiverem confirmações que o outro não? No momento, você precisa inverter os argumentos e executá-lo nos dois sentidos para ver confirmações que o outro ramo não contém.
Elliott Slaughter
38
Se você já mudou para branch-Xvocê pode usargit log master..
Dave
8
@ ElliottSlaughter: Se você deseja encontrar commit que estão no mestre ou no ramo X, mas não em ambos, você pode usar git log master...branch-X(três pontos em vez de dois). Veja man gitrevisionspara mais informações.
Xavier T.
3
É realmente apenas metade da resposta. Nenhum commit no mestre que causam os ramos a divergir não vai aparecer
jterm
9
Se as confirmações tiverem sido escolhidas cereja do ramo X para dominar, isso não as filtrará. Eles ainda estarão na lista de commits "Em branch-X, mas não no mestre" mesmo que eles estão realmente em ambos ..
Tuffwer
87

Acho que é questão de escolha e de contexto. Prefiro usar

git log origin/master..origin/develop --oneline --no-merges

Ele exibirá confirmações em desenvolvimento que não estão na ramificação mestre.

Se você deseja ver quais arquivos são realmente modificados, use

git diff --stat origin/master..origin/develop --no-merges

Se você não especificar argumentos, ele exibirá o diff completo. Se você quiser ver o visual diff, instale meldno linux ou WinMergeno windows. Verifique se eles são os difftools padrão. Em seguida, use algo como

git difftool -y origin/master..origin/develop --no-merges

Caso você queira compará-lo com o ramo atual. É mais conveniente usar HEAD em vez do nome da filial, como use:

git fetch
git log origin/master..HEAD --oneline --no-merges

Ele mostrará todos os commits, prestes a serem mesclados

zainengineer
fonte
11
Se você comparar uma ramificação de liberação que possa ter mesclagens. Você pode remover os commits de mesclagem (que não agregam valor) com a ajuda dos parâmetros, --no-mergescomo:git log origin/master..HEAD --oneline --no-merges
claudiu.f.marginean
15

Se você estiver no Linux, gitgé uma maneira de fazê-lo muito rapidamente e graficamente.

Se você insistir na linha de comando, poderá usar:

git log --oneline --decorate

Para tornar git logmais agradável por padrão, geralmente defino estas preferências globais:

git config --global log.decorate true
git config --global log.abbrevCommit true
mvp
fonte
14

Eu sugiro o seguinte para ver a diferença "em confirmações". Para diferença simétrica, repita o comando com argumentos invertidos:

git cherry -v master [your branch, or HEAD as default]
mmaruska
fonte
Isso é diferente do git master..branch-X?
ilmirons 25/07/19
2
Certamente, "git cherry" é inteligente: traduz de "confirma" em "patches / diffs" e pode evitar relatar um "patch" que esteja nos dois ramos, mas aplicado em ordem diferente.
Mmaruska 30/07/19
8

se você quiser usar o gitk:

gitk master..branch-X

tem uma boa interface gráfica da velha escola

snowcamel
fonte
4

Não é a resposta perfeita, mas funciona melhor para pessoas que usam o Github:

insira a descrição da imagem aqui

Vá para o seu repo: Insights -> Network

AIon
fonte
Além disso, a criação de uma solicitação de recebimento também mostrará as diferenças de ramificação.
Pkamb #
OMG eu quero te abraçar.
esseara 8/01/19
@esseara Eu também sou um grande abraço :)) Você é bem-vindo: D
AIon
2

Se você deseja comparar com base nas mensagens de confirmação, faça o seguinte:

git fetch
git log --oneline origin/master | cut -d' ' -f2- > master_log
git log --oneline origin/branch-X | cut -d' ' -f2- > branchx_log
diff <(sort master_log) <(sort branchx_log)
Maroun
fonte
11
Em vez de usar --onelinee tubulação para cutvocê pode usargit log --format='%s'
opticyclic
0
#! /bin/bash
if ((2==$#)); then
  a=$1
  b=$2
  alog=$(echo $a | tr '/' '-').log
  blog=$(echo $b | tr '/' '-').log
  git log --oneline $a > $alog
  git log --oneline $b > $blog
  diff $alog $blog
fi

Contribuindo com isso porque permite que os logs a e b sejam visualizados, lado a lado, se você tiver uma ferramenta de visual diff. Substitua o comando diff no final pelo comando para iniciar a ferramenta visual diff.

Kim Briggs
fonte
0

Usei algumas das respostas e encontrei uma que se encaixasse no meu caso (verifique se todas as tarefas estão no ramo de lançamento).

Outros métodos também funcionam, mas descobri que eles podem adicionar linhas que eu não preciso, como confirmações de mesclagem que não agregam valor.

git fetch
git log origin/master..origin/release-1.1 --oneline --no-merges

ou você pode comparar seu atual com o mestre

git fetch
git log origin/master..HEAD --oneline --no-merges

git fetch existe para garantir que você esteja usando informações atualizadas.

Dessa forma, cada confirmação estará em uma linha e você poderá copiar / colar isso em um editor de texto e começar a comparar as tarefas com as confirmações que serão mescladas.

claudiu.f.marginean
fonte