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.



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

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.


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

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 :)


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

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

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.