Como posso visualizar quaisquer confirmações locais que fiz e que ainda não foram enviadas ao repositório remoto? Ocasionalmente, git status
imprimirá que meu ramo é X confirma antes origin/master
, mas nem sempre.
Isso é um erro na minha instalação do Git ou estou faltando alguma coisa?
git log @{push}..
. Ver que novo atalho@{push}
(referenciando o ramo de rastreamento remoto que você está empurrando a) em minha resposta abaixogit status --all
deveria ter aparecido em 2010; ougit status -v
deve realmente fornecer a saída detalhada que inclui as informações extras.Respostas:
Você também pode visualizar o diff usando a mesma sintaxe
fonte
git config --global alias.ahead "log origin/master..HEAD --oneline"
para descobrir rapidamente onde estou. Ainda mais doces:for i in *; do echo $i && git ahead 2>/dev/null; done
git log --stat origin/master..HEAD
para um pouco de grandiosidade extra@{u}
sintaxe ainda não estava disponível, ela ficou disponível no dia 12 de fevereiro de 2010 . Além disso,@{u}
não funcionará se o ramo local não estiver configurado com um upstream. Por fim,@{u}
atualmente não possui suporte para preenchimento de guias,<remote>/<branch>
com o preenchimento de guias continua sendo uma das maneiras mais rápidas de obter essas informações e funcionará se um upstream estiver configurado ou não.Se você deseja ver todos os commits em todos os ramos que ainda não foram enviados, talvez esteja procurando algo assim:
E se você deseja ver apenas o commit mais recente em cada ramo e os nomes dos ramos, isto:
fonte
git log master..HEAD
não funcionaria, pois havia vários upstreams. Esta postagem me levougit log MyBranch --not --remotes
a mostrar todos os commits que não foram enviados a nenhum montante em um único ramo.--decorate
mostra os galhos também.--graph
torna ainda mais óbvio.Você pode mostrar todas as confirmações que possui localmente, mas não a montante com
@{u}
ou@{upstream}
significa a ramificação a montante da ramificação atual (consultegit rev-parse --help
ougit help revisions
para obter detalhes).fonte
git log @{u}.. -p
Uma das opções mais úteis é -p , que mostra as diferenças introduzidas em cada confirmação.Isso funcionou para mim:
Conforme indicado no Git: Veja todas as confirmações não confirmadas ou confirmadas que não estão em outra ramificação .
fonte
Você pode fazer isso com
git log
:Supondo que esse
origin
seja o nome do seu upstream, deixando de fora qualquer nome de revisão após o..
implícitoHEAD
, que lista os novos commits que não foram enviados.fonte
git log
e "2-pontos-não-3", ele sempre me lembra stackoverflow.com/questions/53569/… ;)git branch --set-upstream master origin/<branch>
para configurar o upstream se você estiver inclinado a usar este comando para ver confirmações que são preparadas.Todas as outras respostas falam sobre "upstream" (o ramo do qual você puxa).
Porém, uma ramificação local pode enviar para uma ramificação diferente daquela que ele puxa.
master
pode não enviar para a ramificação de rastreamento remoto "origin/master
".O ramo upstream de
master
pode serorigin/master
, mas pode ser enviado para o ramo de rastreamento remotoorigin/xxx
ou até mesmoanotherUpstreamRepo/yyy
.Esses são definidos
branch.*.pushremote
para a ramificação atual junto com oglobal remote.pushDefault
valor.É que ramo de rastreamento remoto, que conta quando procuram commits unpushed: aquele que controla o
branch at the remote
onde o ramo local seria empurrado para.O
branch at the remote
pode ser, novamente,origin/xxx
ou mesmoanotherUpstreamRepo/yyy
.O Git 2.5+ (Q2 2015) apresenta um novo atalho para isso:
<branch>@{push}
Veja 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 de 21 de maio 2015] e confirme e41bf35 [01 de maio de 2015] por Jeff King (
peff
) .(Mesclado por Junio C Hamano -
gitster
-no commit c4a8354 , 05 jun 2015)A confirmação adfe5d0 explica:
O commit 29bc885 acrescenta:
Se você deseja ver quantas confirmações suas ramificações locais estão à frente / atrás em comparação com a ramificação para a qual você está empurrando:
fonte
Alias prático do git para procurar confirmações não enviadas na ramificação atual :
O que isso basicamente faz:
mas também determina o nome do ramo atual.
fonte
git alias <alias-name> <command>
nesse caso, o comando deve estar entre aspas simples, para escapar de caracteres especiais do shell.git config --global alias.unpushed '!GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline'
Você poderia tentar....
Eu sei que não é uma opção pura de linha de comando, mas se você a tiver instalada e estiver em um sistema GUI, é uma ótima maneira de ver exatamente o que você está procurando, além de muito mais.
(Estou realmente meio surpreso que ninguém tenha mencionado isso até agora.)
fonte
gitk --all
para visualizar todos os ramos.tig
é a alternativa ncurses.gitk
é incrível! Nunca soube que isso existe! Útil para navegar pelas alterações em uma boa interface do usuário.tig
é mais útil em uma situação 'terminal only' - onde você não obtém acesso à GUI da área de trabalho. Aprendendo sobre isso pela primeira vez! INTERESSANTE:tig
é o inversogit
!git branch -v
mostrará, para cada filial local, se está "à frente" ou não.fonte
devel
, a linha correspondente será* devel 8a12fc0 [ahead 1] commit msg
(*
será apenas na linha correspondente à ramificação com check-out).ahead 1
significa "avançar por um commit", ou seja, há um commit não empurrado.git branch -vv
? Cf. docs: “Se fornecido duas vezes, imprima também o nome da ramificação upstream (consulte também git remote show <remote>).”behind
e / ouahead
para cada ramificação local, o que é suficiente para resolver o problema do OP (detecção de confirmações não enviadas).git branch -v
é o suficiente para que, assim testados novamente com o Git 2.16.2 :)Eu fiz um commit anteriormente, não fui enviado a nenhum ramo, nem remoto nem local. Apenas o commit. Nada de outras respostas funcionou para mim, mas com:
Lá encontrei meu commit.
fonte
Eu uso o seguinte alias para obter apenas a lista de arquivos (e o status) que foram confirmados, mas não foram enviados (para a ramificação atual)
então faça:
fonte
Acredito que a maneira mais típica de fazer isso é executar algo como:
No entanto, eu pessoalmente prefiro executar:
que mostra as confirmações de todas as ramificações que não foram mescladas a montante, mais a última confirmação a montante (que aparece como um nó raiz para todas as outras confirmações). Eu o uso com tanta frequência que criei um alias
noup
para ele.fonte
Eu sugiro que você vá ver o script https://github.com/badele/gitcheck , codifiquei esse script para verificar em uma passagem todos os seus repositórios git e mostrar quem não fez o commit e quem não fez push / pull.
Aqui um exemplo de resultado
fonte
Isso listará seu histórico de comentários local (ainda não enviado) com a mensagem correspondente
fonte
Não é um inseto. O que você provavelmente vê é o status git após uma falha na mesclagem automática, na qual as alterações do controle remoto são buscadas, mas ainda não foram mescladas.
Para ver as confirmações entre repositório local e remoto, faça o seguinte:
Isso é 100% seguro e não simula sua cópia de trabalho. Se houver mudanças, será
git status
exibidoX commits ahead of origin/master
.Agora você pode mostrar o log de confirmações que estão no controle remoto, mas não no local:
fonte
Isso funcionou melhor para mim:
ou:
fonte
@{upstream}
é literal (upstream
é uma palavra mágica), enquantoremotebranch
é apenas o nome do seu ramo.Existe uma ferramenta chamada não pressionada que varre todos os repositórios Git, Mercurial e Subversion no diretório de trabalho especificado e mostra a lista de arquivos não autorizados e as confirmações não enviadas. A instalação é simples no Linux:
ou
instalar em todo o sistema.
O uso também é simples:
Veja
unpushed --help
ou descrição oficial para mais informações. Ele também possui um script cronjobunpushed-notify
para notificação na tela de alterações não confirmadas e não enviadas.fonte
Para listar todas as confirmações não enviadas em todas as ramificações facilmente, você pode usar este comando:
fonte
Similar: Para visualizar ramificações não imersas:
Aqueles podem ser suspeitos, mas eu recomendo a resposta por cxreg
fonte
Se o número de confirmações que não foram enviadas for um número de um dígito, o que geralmente acontece, a maneira mais fácil é:
O git responde dizendo que você está "adiantado N confirma" em relação à sua origem. Portanto, agora lembre-se desse número ao visualizar logs. Se você estiver "à frente em três confirmações", as três confirmações principais da história ainda serão privadas.
fonte
Uma maneira de fazer as coisas é listar confirmações disponíveis em uma ramificação, mas não em outra.
fonte
Como dito acima:
origem do git diff / master..HEAD
Mas se você estiver usando git gui
Depois de abrir a interface da GUI, selecione "Repositório" -> Abaixo desse item " Visualizar histórico "
Nota: Algumas pessoas gostam de usar o CMD Prompt / Terminal, enquanto outras gostam de usar a GUI do Git (para simplificar)
fonte
Aqui está minha solução portátil (shell script que também funciona no Windows sem instalação adicional) que mostra as diferenças de origem para todos os ramos: git-fetch-log
Um exemplo de saída:
Os parâmetros passados para o log, por exemplo,
--oneline
ou--patch
podem ser usados.fonte
mostrará todas as diferenças nos seus commit locais.
mostrará o ID da confirmação local e o nome da confirmação.
fonte
git show
mostra apenas a confirmação mais recente, independentemente de ter sido enviada para o controle remoto ou não, não mostrará todas as confirmações não enviadas por push.Supondo que sua ramificação esteja configurada para rastrear a origem, isso deve mostrar as diferenças.
Fornecerá um resumo dos commits.
fonte
git log origin
mostrará confirmações que já foram enviadas por push , mas não mostrará confirmações que não foram enviadas , o que é mais parecido com o que o pôster original estava pedindo.