Pergunta

Como posso ver nenhum commit locais que eu fiz, que ainda não foram empurrados para o repositório remoto? Ocasionalmente, git status irá imprimir que o meu ramo é X comete à frente de origin/master, mas nem sempre.

Este é um bug com a minha instalação do Git, ou estou faltando alguma coisa?

Foi útil?

Solução

git log origin/master..HEAD

Você também pode ver o diff usando a mesma sintaxe

git diff origin/master..HEAD

Outras dicas

Se você quiser ver todos os commits em todos os ramos que ainda não são empurrados, você pode estar à procura de algo como isto:

git log --branches --not --remotes

E se você só quiser ver o mais recente comprometer em cada ramo, e os nomes do ramo, isto:

git log --branches --not --remotes --simplify-by-decoration --decorate --oneline

Você pode mostrar todos os commits que você tem localmente, mas não a montante com

git log @{u}..

@{u} ou @{upstream} meio do ramo a montante do ramo atual (veja git rev-parse --help ou git help revisions para mais detalhes).

Isso funcionou para mim:

git cherry -v 

Como indicado em Git: Veja todos os commits unpushed ou commits que não estão em outro ramo

.

Você pode fazer isso com git log :

git log origin..

Assumindo que origin é o nome do seu montante, deixando de fora qualquer nome de revisão após .. implica HEAD, que lista as novas submissões que não foram empurrados.

apelido git acessíveis para procurar commits unpushed em atual ramo:

alias unpushed = !GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline

O que isto faz basicamente:

git log origin/branch..branch

mas também determina nome de ramo atual.

Todas as outras respostas falar sobre "upstream" (o ramo que você puxar a partir).
Mas um filial local pode impulso para um diferente ramo do que aquele que puxa a partir.

master não pode empurrar para o controle remoto ramo de rastreamento "origin/master".
O a montante ramo para master pode ser origin/master, mas poderia empurrar para o origin/xxx rastreamento filial remota ou mesmo anotherUpstreamRepo/yyy.
Aqueles são definidas por branch.*.pushremote para o ramo atual juntamente com o valor global remote.pushDefault.

É que de rastreamento remoto ramo que conta quando procuram commits unpushed:. A que as faixas do branch at the remote onde o filial local seria empurrado para
O branch at the remote pode ser, de novo, origin/xxx ou mesmo anotherUpstreamRepo/yyy.

Git 2.5+ (Q2 2015) introduz um novo atalho para isso: <branch>@{push}

cometer 29bc885 , cometer 3dbe9db , cometer adfe5d0 , cometer 48c5847 , cometer a1ad0eb , cometer e291c75 , cometer 979cb24 , cometer 1ca41a1 , cometer 3a429d0 , cometer a9f9f8c , cometer 8770e6f , cometer da66b27 , cometer f052154 , cometer 9e3751d , cometer ee2499f [tudo a partir de 21 de maio de 2015], e cometer e41bf35 [01 de maio de 2015] b y Jeff King (peff) .
(incorporada pela Junio ??C Hamano - gitster - em cometer c4a8354 , 05 de junho de 2015)

Commit adfe5d0 explica:

sha1_name: implementar @{push} atalho

Em um fluxo de trabalho triangular, cada ramo pode ter dois pontos distintos de interesse: o @{upstream} que você normalmente puxar, eo destino que você normalmente empurrar para. Não é um atalho para o último, mas é útil ter.

Por exemplo, você pode querer saber o que compromete você não temainda empurrou :

git log @{push}..

Ou como um exemplo mais complicado, imagine que você normalmente puxar mudanças a partir origin/master (que você definiu como seu @{upstream}), e mudanças de envio a seu próprio garfo pessoal (por exemplo, como myfork/topic).
Você pode empurrar para o garfo de várias máquinas, exigindo que você integram as alterações do destino impulso, em vez da montante .
Com este patch, você pode apenas fazer:

git rebase @{push}

em vez de digitar o nome completo.

Commit 29bc885 acrescenta:

for-each-ref: aceitar "%(push)" formato

Assim como nós temos "%(upstream)" para relatar a "@{upstream}" para cada ref, este patch adiciona "%(push)" para corresponder "@{push}".
Ele suporta os mesmos modificadores formato de rastreamento como a montante (porque você pode querer saber, por exemplo, que ramos têm commits para empurrar ).

Se você quiser ver quantos comprometer suas filiais locais são à frente / trás em comparação com o ramo que você está empurrando a:

git for-each-ref --format="%(refname:short) %(push:track)" refs/heads

Você poderia tentar ....

gitk

Eu sei que não é uma opção de linha de comando pura, mas se você tiver instalado e estiver em um sistema de GUI é uma ótima maneira de ver exatamente o que você está procurando mais um lote inteiro mais.

(Eu estou realmente tipo de surpreendeu ninguém mencionou até agora.)

git branch -v mostrará, para cada ramo local, quer se trate da "frente" ou não.

Eu uso o seguinte apelido para obter apenas a lista de arquivos (e o status) que foram cometidos, mas não foram empurrados (para o ramo atual)

git config --global alias.unpushed \
"diff origin/$(git name-rev --name-only HEAD)..HEAD --name-status"

em seguida, basta fazer:

git unpushed

Eu tinha um commit feito anteriormente, não empurrado para qualquer ramo, nem remoto nem local. Apenas a cometer. Nada de outras respostas funcionou para mim, mas com:

git reflog

Lá encontrei o meu cometer.

Eu acredito que a maneira mais comum de fazer isso é executar algo como:

git cherry --abbrev=7 -v @{upstream}

No entanto, eu pessoalmente prefiro correr:

git log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..

que mostra os compromete de todas ramos que não são incorporadas a montante, mais o último commit no montante (que aparece como um nó de raiz para todos os outros commits) . Eu usá-lo tantas vezes que eu criei apelido noup para ele.

git config --global alias.noup \
'log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..'

Não é um bug. O que você provavelmente vendo é git status depois de uma auto-junção falhou onde as mudanças de controle remoto são buscados, mas ainda não se fundiram.

Para ver os commits entre repo local e remoto faça o seguinte:

git fetch

Este é 100% seguro e não vai zombar de sua cópia de trabalho. Se houve mudanças git status show de X commits ahead of origin/master wil.

Você pode agora mostrar o registo de commits que estão no remoto, mas não no local:

git log HEAD..origin

Eu sugiro que você vá ver o script https://github.com/badele/gitcheck , i ter codificado esse script para check in One Pass todos os seus repositórios git, e mostrar que não tenha cometido e que não tenha empurrado / puxado.

Aqui, um resultado da amostra enter descrição da imagem aqui

git cherry -v

Isto irá listar o seu comentário história local (ainda não empurrou) com a mensagem correspondente

Há ferramenta chamada unpushed que verifica todos os repos Git, Mercurial e Subversion no diretório de trabalho especificado e mostra uma lista de arquivos ucommited e commits unpushed. A instalação é simples sob Linux:

$ easy_install --user unpushed

ou

$ sudo easy_install unpushed

para instalar todo o sistema.

O uso é simples também:

$ unpushed ~/workspace
* /home/nailgun/workspace/unpushed uncommitted (Git)
* /home/nailgun/workspace/unpushed:master unpushed (Git)
* /home/nailgun/workspace/python:new-syntax unpushed (Git)

Veja unpushed --help ou oficial descrição para obter mais informações. Ele também tem uma unpushed-notify roteiro cronjob para a notificação na tela de mudanças uncommited e unpushed.

Isso funcionou melhor para mim:

git log --oneline @{upstream}..

ou

git log --oneline origin/(remotebranch)..

Similar: Para visualizar ramos unmerged:

git branch --all --no-merged

Aqueles pode ser suspeito, mas eu recomendo a resposta por cxreg

Para listar todas unpushed cometer em todos os ramos facilmente você pode usar este comando:

 git log --branches  @{u}..

Se o número de submissões que não foram empurrados para fora é um número de um dígito, o que muitas vezes é, a maneira mais fácil é:

$ git checkout

responde git por lhe dizer que você está "à frente N comete" em relação a sua origem. Portanto, agora apenas manter esse número em mente ao visualizar logs. Se você está "à frente por 3 commits", o top 3 commits na história ainda são privados.

uma maneira de fazer as coisas é a lista de commits que estão disponíveis em um ramo, mas não o outro.

git log ^origin/master master

Aqui está a minha solução portátil (shell script que funciona no Windows também sem instalar adicional), que mostra as diferenças de origem para todos os ramos: git-fetch-log

Um exemplo de saída:

==== branch [behind 1]

> commit 652b883 (origin/branch)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date:   2016-03-10 09:11:11 +0100
|
|     Commit on remote
|
o commit 2304667 (branch)
  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
  Date:   2015-08-28 13:21:13 +0200

      Commit on local

==== master [ahead 1]

< commit 280ccf8 (master)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date:   2016-03-25 21:42:55 +0100
|
|     Commit on local
|
o commit 2369465 (origin/master, origin/HEAD)
  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
  Date:   2016-03-10 09:02:52 +0100

      Commit on remote

==== test [ahead 1, behind 1]

< commit 83a3161 (test)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date:   2016-03-25 22:50:00 +0100
|
|     Diverged from remote
|
| > commit 4aafec7 (origin/test)
|/  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
|   Date:   2016-03-14 10:34:28 +0100
|
|       Pushed remote
|
o commit 0fccef3
  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
  Date:   2015-09-03 10:33:39 +0200

      Last common commit

Os parâmetros passados ??para o log, por exemplo, --oneline ou --patch pode ser usado.

git show

irá mostrar todos os diffs em seus commits locais.

git show --name-only

mostrará o local de cometer id eo nome do cometer.

git diff origin

Assumindo que o seu ramo está configurado para rastrear a origem, em seguida, que deve mostrar-lhe as diferenças.

git log origin

Vamos dar-lhe um resumo dos commits.

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