Qual é a melhor maneira de obter um log de confirmações em uma ramificação desde o momento em que ela foi ramificada da ramificação atual? Minha solução até agora é:
git log $(git merge-base HEAD branch)..branch
A documentação para git-diff indica que git diff A...B
é equivalente a git diff $(git-merge-base A B) B
. Por outro lado, a documentação para git-rev-parse indica que r1...r2
é definido como r1 r2 --not $(git merge-base --all r1 r2)
.
Por que isso é diferente? Observe que isso git diff HEAD...branch
me dá as diferenças que eu quero, mas o comando git log correspondente me dá mais do que eu quero.
Nas imagens, suponha o seguinte:
x --- y --- z --- ramo / --- a --- b --- c --- d --- e --- CABEÇA
Gostaria de obter um log contendo confirmações x, y, z.
git diff HEAD...branch
dá esses commits- no entanto,
git log HEAD...branch
fornece x, y, z, c, d, e.
Respostas:
No contexto de uma lista de revisão,
A...B
é como agit-rev-parse
define. O git-log faz uma lista de revisão.git-diff
não aceita uma lista de revisões - é necessária uma ou duas revisões e definiu aA...B
sintaxe para significar como é definida na página degit-diff
manual. Segit-diff
não definisse explicitamenteA...B
, essa sintaxe seria inválida. Observe que a página degit-rev-parse
manual descreveA...B
na seção "Especificando intervalos" e tudo nessa seção é válido apenas em situações em que um intervalo de revisão é válido (ou seja, quando uma lista de revisão é desejada).Para obter um log contendo apenas x, ye z, tente
git log HEAD..branch
(dois pontos, não três). Isso é idênticogit log branch --not HEAD
e significa que todos os commit na ramificação que não estão no HEAD.fonte
git diff HEAD..branch
é idêntico agit diff HEAD branch
. A principal coisa a lembrar aqui é que o log recebe uma lista / intervalo de revisões, enquanto o diff não. É por isso que eles tratam seus argumentos de maneira diferente.git diff HEAD...branch
(três pontos) corresponde à saída degit log HEAD..branch
faz exatamente o que você está perguntando, quando você está no
master
ramo.Também gosto muito de:
O que não é exatamente o que você está perguntando, mas ainda é muito útil no mesmo contexto.
fonte
git cherry
é realmente muito útil. Obrigado :)gif-diff
::git diff x..z
ou, no meu próprio exemplo, égit diff 13bc4d..8eda3a
.O que você deseja ver é a lista de confirmações de saída. Você pode fazer isso usando
ou
Onde eu assumo que "branchName" foi criado como um ramo de rastreamento de "master".
Da mesma forma, para ver as alterações recebidas, você pode usar:
fonte
Isso é semelhante à resposta que eu postei em: Visualizar um push do Git
Solte estas funções no seu perfil do Bash:
Você pode usar isso como:
Isso funcionará com qualquer ramo.
fonte
Semelhante a várias respostas como Alex V e NDavis, mas nenhuma delas é a mesma.
Quando já estiver no ramo em questão
Usando:
Que combina vários recursos:
Atualizar:
Provavelmente deve ser
git diff master
, mas também mostra o diff, não o commit, conforme a pergunta especificada.fonte
git co master; git pull
criou o ramo desde então,git diff master
não será muito útil para obter as diferenças introduzidas SOMENTE por confirmações no ramo especificado.git diff <branch1>...<branch2>
mostrará as alterações introduzidas porbranch2
.Jogue um -p para ver algumas ALTERAÇÕES DE ARQUIVO
Faça alguns apelidos:
Veja as confirmações exclusivas de uma filial:
fonte
Para ver o log da ramificação atual desde a ramificação do mestre:
git log master...
Se você está atualmente no mestre, para ver o log de uma ramificação diferente, uma vez que ela ramificou o mestre:
git log ...other-branch
fonte
(3dots), mas às vezes mostra '+' em vez de '='
fonte
eu encontrei
mais útil, já que você não apenas recebe as mensagens de confirmação, mas todo o diff. Se você já está no ramo em que deseja ver as alterações e (por exemplo) deseja ver o que mudou para o mestre, pode usar:
fonte