ti-enxame.com

Como posso ver o que estou prestes a empurrar com o git?

Existe uma maneira de ver o que seria empurrado se eu fizesse um comando git Push?

O que eu estou imaginando é algo como a aba "Arquivos Alterados" do recurso "pull request" do Github. Quando eu emito um pedido pull, posso ver e ver o que será puxado se eles aceitarem o meu pedido pull: github example of aggregate changes

A linha de comando está OK, mas eu prefiro algum tipo de GUI (como a imagem acima).

515
cmcculloh

Para uma lista de arquivos a serem empurrados, execute:

git diff --stat --cached [remote/branch]

exemplo:

git diff --stat --cached Origin/master

Para o diff do código dos arquivos a serem enviados, execute:

git diff [remote repo/branch]

Para ver os caminhos completos dos arquivos que serão alterados, execute:

git diff --numstat [remote repo/branch]

Se você quiser ver estes diffs em uma GUI, você precisará configurar o git para isso. Veja Como vejo a saída 'git diff' com um programa de diferenças visuais? .

584
Ionuț G. Stan

Há sempre a seco:

git Push --dry-run

Ele fará tudo, exceto o envio real dos dados.

Se você quer uma visão mais gráfica, você tem várias opções.

Tig e o script gitk que vem com o git exibem o ramo atual da sua cópia local e o ramo do controle remoto ou do Origin.

alt text

Então, qualquer commit que você fizer depois da Origem serão os commits que serão enviados.

Abra o gitk do Shell enquanto estiver no ramo que você deseja enviar digitando gitk& e, em seguida, para ver a diferença entre o que está no controle remoto e o que você está prestes a enviar ao controle remoto, selecione o commit local não pressionado e clique com o botão direito no controle remoto. e escolha "Diff this -> selected": alt text

175
Brian Gianforcaro

Para simplesmente listar os commits esperando para serem enviados: ( este é o que você irá lembrar )

git cherry -v

Mostrar os assuntos de commit ao lado do SHA1s.

150
Alex Nolasco

Você provavelmente deseja executar git difftool Origin/master.... Isso deve mostrar o diff unificado do que está em sua ramificação atual que ainda não está na ramificação Origin/master e exibi-lo na ferramenta de diferenças gráficas de sua escolha. Para estar mais atualizado, execute git fetch primeiro.

19
Scott Chacon

Uma maneira de comparar sua versão local antes de empurrá-la no repositório remoto (tipo de Push in dry-run):

Use o TortoiseGit:
Clique com o botão direito no projeto da pasta raiz> TortoiseGit> Diff com versão anterior>
para a versão 2, escolha refs/remotes/Origin/master

8
user1921207

Tente git diff Origin/master..master (assumindo que Origin/master é o seu upstream). Ao contrário de git Push --dry-run, isso ainda funciona mesmo se você não tiver permissão de gravação para o desenvolvedor.

7
Ed Avis

Use git gui, lá você pode ver uma lista do que mudou no commit atual. Você também pode usar o gitk, que fornece uma interface fácil para os reflogs. Basta comparar entre remotes/... e master para ver o que será enviado. Ele fornece uma interface semelhante à sua captura de tela.

Ambos os programas estão incluídos no git.

5
fuz

Para ver quais arquivos foram alterados e , veja as alterações reais do código em comparação com a ramificação master que você pode usar:

git diff --stat --patch Origin master

NOTE: Se acontecer de você usar qualquer um dos Intellij IDEs, então você pode clicar com o botão direito do mouse em seu projeto de nível superior, selecionar Git> Compare com o ramo> e escolha a origem que deseja, por exemplo Origin/master. Na árvore de arquivos que aparecerá, você pode clicar duas vezes nos arquivos para ver uma diferença visual. Ao contrário da opção de linha de comando acima, você pode editar suas versões locais a partir da janela de diferenças.

4
ccpizza

Se você estiver usando o Mac OS X, eu recomendo que você pegue o Tower, é um programa maravilhoso que fez com que lidar com o Git fosse um prazer para mim. Eu agora tenho que lembrar de comandos de terminal e oferece uma excelente interface gráfica para visualizar, rastrear e resolver diferenças em arquivos.

E não, eu não sou afiliado a eles, apenas uso o software deles e gosto muito dele.

http://www.git-tower.com/

2
kakubei
  1. Se você tiver permissões de gravação no controle remoto

git Push --dry-run

  1. Se você não tem permissões de gravação no controle remoto

git diff --stat HEAD remoto/ramo

1
vkg

Você pode listar os commits por:

git cherry -v

E então compare com o seguinte comando, onde o número de ^ é igual ao número de commits (no exemplo seus 2 commits):

git diff HEAD^^
1
DavidS

Apenas para adicionar meus dois centavos ... Eu queria implementar isso ao executar trabalhos em um pipeline de gitlab em um corredor gitlab. A melhor maneira de fazer isso foi usar este script:

git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA

Também no meu caso eu queria filtrar arquivos por extensão, para conseguir isso eu usei:

git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA '*.py'

Depois disso, você pode, por exemplo, encaminhar essa lista para outro lugar, um linter talvez;)

Espero que isso ajude alguém.

0
Michal Mikolajczyk