Pergunta

Qual é a melhor forma para obter um log de commits em um ramo desde o momento em que foi ramificado a partir da ramificação atual?A 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-analisar indica que r1...r2 é definido como r1 r2 --not $(git merge-base --all r1 r2).

Por que eles são diferentes?Note que git diff HEAD...branch dá-me o diffs que eu quero, mas o correspondente git log de comando dá-me mais do que o que eu quero.

Nas fotos, suponha que este:

         x---y---z---branch
        /
---a---b---c---d---e---HEAD

Eu gostaria de obter um log contendo compromete-se x, y, z.

  • git diff HEAD...branch dá a estes compromete-se
  • no entanto, git log HEAD...branch dá x, y, z, c, d, e.
Foi útil?

Solução

No contexto de uma lista de revisão, A...B é como git-rev-parse define.git-log leva uma lista de revisão. git-diff não tome uma lista de revisões - ele leva uma ou duas revisões, e tem definido o A...B a sintaxe para dizer, como é definido no git-diff página de manual.Se git-diff não definir explicitamente A...B, e , em seguida, que a sintaxe seria inválido.Observe que o git-rev-parse página de manual descreve A...B em "Especificar Intervalos de seção", e tudo em que seção é válida apenas em situações onde um intervalo de revisões é válido (por exemplo,quando uma lista de revisão é pretendida).

Para obter um log contendo apenas de x, y e z, tente git log HEAD..branch (dois pontos e não três).Este é idêntico ao git log branch --not HEAD, e significa que todos os compromete-se no ramo que não estão na CABEÇA.

Outras dicas

git cherry branch [newbranch]

faz exatamente o que você está pedindo, quando você estiver no master ramo.

Eu também sou muito fã de:

git diff --name-status branch [newbranch]

O que não é exatamente o que você está perguntando, mas ainda é muito útil no mesmo contexto.

O que você quer ver é a lista de saída compromete-se.Você pode fazer isso usando

git log master..branchName 

ou

git log master..branchName --oneline

Onde eu assumo que "branchName" foi criado como um acompanhamento do ramo de "mestre".

Da mesma forma, para ver a entrada alterações que você pode usar:

git log branchName..master

Isso é semelhante a resposta que eu postado em: Pré-visualizar um Git push

Colocar estas funções em seu Bash perfil:

  • gbout - git branch saída
  • gbin - git branch entrada

Você pode usar esse como:

  • Se no master:gbin branch1 <-- este vai mostrar o que está em branch1 e não no mestre
  • Se no master:gbout branch1 <-- isto irá mostrar a você o que em mestre, que não é do ramo 1

Isso vai funcionar com qualquer ramo.

function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}

function gbin {
    echo branch \($1\) has these commits and \($(parse_git_branch)\) does not
    git log ..$1 --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}

function gbout {
    echo branch \($(parse_git_branch)\) has these commits and \($1\) does not
    git log $1.. --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}

Semelhante a várias respostas, como Alex, V e NDavis, mas nenhum deles é exatamente o mesmo.

Quando já no ramo em questão

Usando:

git diff master...

O que combina vários recursos:

  • é super curto
  • mostra as alterações reais

Atualização:

Isto provavelmente deve ser git diff master, mas também isso mostra a comparação, não a compromete-se como a questão especificado.

Jogue a-p lá para ver algumas ALTERAÇÕES de ARQUIVO

git log -p master..branch

Fazer alguns aliases:

alias gbc="git branch --no-color | sed -e '/^[^\*]/d' -e 's/* \\(.*\\)/\1/'"

alias gbl='git log -p master..\`gbc\`'

Consulte um ramo única compromete-se:

gbl

Para ver o registo da atual ramo desde ramificando-se mestre:

git log master...

Se você está atualmente em mestre, para ver o registo de uma ramificação diferente, pois ramificado mestre:

git log ...other-branch

git log --cherry-mark --oneline from_branch...to_branch

(3dots), mas às vezes mostra '+' em vez de '='

Eu encontrei

git diff <branch_with_changes> <branch_to_compare_to>

mais útil, desde que você não só obter as mensagens de confirmação, mas toda a comparação.Se você já está no ramo que você deseja ver as alterações e (por exemplo) quer ver o que foi alterado para o master, você pode usar:

git diff HEAD master
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top