Como verificar se há alterações no repositório Git remoto (origem)?

249

Questão

Quais são os comandos do Git para executar o seguinte fluxo de trabalho?

Cenário

Eu clonei de um repositório e fiz algumas confirmações minhas no meu repositório local. Enquanto isso, meus colegas fizeram confirmações no repositório remoto. Agora eu quero:

  1. Verifique se há novos commit de outras pessoas no repositório remoto, ou seja origin?

  2. Digamos que havia 3 novos commits no repositório remoto desde a minha última puxada, eu gostaria de diff commits do repositório remoto, ou seja, HEAD~3com HEAD~2, HEAD~2com HEAD~1e HEAD~1com HEAD.

  3. Depois de saber o que mudou remotamente, quero obter as confirmações mais recentes das outras.

Minhas descobertas até agora

Para a etapa 2: conheço a notação de sinal de intercalação HEAD^, HEAD^^etc. , e a notação de til HEAD~2, HEAD~3etc.

Para a etapa 3: acho que é apenas a git pull.

Lernkurve
fonte
3
Possível duplicado de Verifique se tração necessária em Git
Daniele Orlando
O @ Daniel que responde a você está vinculando é excelente e até vem com um script bash personalizável. +1
gorbysbm

Respostas:

255

Você pode git fetch originatualizar a ramificação remota no seu repositório para apontar para a versão mais recente. Para uma comparação com o controle remoto:

git diff origin/master

Sim, você também pode usar notação de sinal de intercalação.

Se você deseja aceitar as alterações remotas:

git merge origin/master
Alan Haggai Alavi
fonte
34
O diff parece invertido. Eu acho mais fácil de usar, git diff HEAD origin/masterentão o diff mostra o que será aplicado se eu aceitar as alterações remotas.
Cbliard
2
"git fetch origin" e "git show-branch * master" foram úteis para mim.
Léa Massiot
159
git remote update && git status 

Encontrei isso na resposta para Verificar se é necessário puxar no Git

git remote updatepara atualizar seus árbitros remotos. Então você pode fazer uma de várias coisas, como:

  1. git status -unodirá se o ramo que você está rastreando está à frente, atrás ou divergiu. Se não diz nada, o local e o remoto são os mesmos.

  2. git show-branch *master mostrará os commits em todos os ramos cujos nomes terminam em master (por exemplo, master e origin / master).

Se você usar -vcom git remote updatevocê pode ver quais ramos foram atualizados, para que você realmente não precisa de quaisquer outros comandos.

Rajani Karuturi
fonte
Insuficiente. Eu tenho que fazer isso git pull <remote> <branch>depois que eu forçar, porque a ponta da minha filial local estava atrás da contraparte remota.
Overdrivr
3
@Overdrivr, a pergunta pede uma maneira de verificar as alterações antes de enviar as confirmações para a filial local. então, sim, você deve atualizar sua filial local após verificar as alterações.
Rajani Karuturi
É para origem remota ou upstream?
precisa saber é o seguinte
1
Essa opção -v não funciona. Para que git remote update -veu chegueierror: unknown switch `v'
Shad
1
@Shad você deve fazer git remote -v updatenãogit remote update -v
Rajani Karuturi
34

Uma boa maneira de ter uma visão sintética do que está acontecendo "origem" é:

git remote show origin
entalhe
fonte
11
Mas esse comando não me mostra quantos commits houve na "origem" desde a minha última tentativa, mostra? A maneira como entendi "git remote show origin" é uma operação local e não passa pela rede para buscar informações.
Lernkurve 25/03
24

Eu apenas uso

git remote update
git status

O último informa quantos commits estão por trás do meu local. (caso existam)

então

git pull origin master

para atualizar meu local :)

Paulo 501
fonte
13

Minha pergunta comum é "algo novo ou alterado no repositório ", então o que mudou é útil. Encontrei aqui .

git whatchanged origin/master -n 1
iceCode
fonte
1
nunca novo este comando existiu. obrigado. isto é o que eu estava procurando
Saurabh Jain
11

Uma solução potencial

Graças à solução de Alan Haggai Alavi, criei o seguinte fluxo de trabalho potencial:

Passo 1:

git fetch origin

Passo 2:

git checkout -b localTempOfOriginMaster origin/master
git difftool HEAD~3 HEAD~2
git difftool HEAD~2 HEAD~1
git difftool HEAD~1 HEAD~0

Etapa 3:

git checkout master
git branch -D localTempOfOriginMaster
git merge origin/master
Lernkurve
fonte
13
Por que você precisa fazer uma ramificação temporária para diferenças entre as revisões do controle remoto? você pode apenasgit diff origing/master^ origing/master^^
Pablo Marin-Garcia
@ PabloMarin-Garcia: Obrigado. Eu não sabia disso naquela época.
Lernkurve
2

git statusnem sempre mostra a diferença entre mestre e origem / mestre, mesmo após uma busca. Se você deseja que a combinação git fetch origin && git statusfuncione, é necessário especificar as informações de rastreamento entre filial e origem local:

# git branch --set-upstream-to=origin/<branch> <branch>

Para ramificação mestre:

git branch --set-upstream-to=origin/master master
chacal
fonte
0

desde que não foi sugerido até agora ... e acho bastante útil ...

eu simplesmente uso

git fetch origin

para buscar as alterações remotas e, em seguida, visualizo confirmações remotas locais e pendentes (e suas alterações associadas) com a boa ferramenta gitk ( https://git-scm.com/docs/gitk ) envolvendo o argumento --all como

gitk --all
raphael
fonte