2010-03-25 12 views
182

QuestionComment vérifier les changements sur le dépôt Git distant (origine)?

Quelles sont les commandes Git pour effectuer le flux de travail suivant?

Scénario

I clonés à partir d'un référentiel et fait quelques commits de mon propre à mon dépôt local. En attendant, mes collègues ont fait des engagements dans le dépôt distant. Maintenant, je veux:

  1. Vérifiez si des nouveaux commits d'autres personnes sur le dépôt distant, à savoir origin?

  2. dit qu'il y avait 3 nouveaux commits sur le dépôt distant depuis ma dernière pull, je voudrais diff le des commits de dépôt à distance, à savoir HEAD~3 avec HEAD~2, HEAD~2 avec HEAD~1 et HEAD~1 avec HEAD. Après avoir pris connaissance de ce qui a changé à distance, Je souhaite obtenir les dernières validations des autres.

Mes résultats jusqu'à présent

Pour l'étape 2: Je sais que la notation caret HEAD^, etc. HEAD^^ et la notation tilde HEAD~2, HEAD~3 etc.

Pour l'étape 3: C'est , Je suppose, juste un git pull.

+3

double possible de [Vérifiez si tirez nécessaire dans Git ] (http://stackoverflow.com/questions/3258243/check-if-pull-needed-in-git) –

+0

@Daniele qui répond que vous liez est superbe et vient même avec un script bash personnalisable. +1 – gorbysbm

Répondre

196

Vous pouvez git fetch origin mettre à jour la branche distante dans votre référentiel pour pointer vers la dernière version. Pour un diff par rapport à la télécommande:

git diff origin/master 

Oui, vous pouvez également utiliser la notation caret.

Si vous voulez accepter les modifications à distance:

git merge origin/master 
+26

Le diff semble inversé. Je trouve plus facile d'utiliser 'git diff HEAD origin/master' donc le diff montre ce qui sera appliqué si j'accepte les changements à distance. – cbliard

+2

"git fetch origin" et "git show-branch * master" m'ont été utiles. –

33

Une bonne façon d'avoir une vue synthétique de ce qui se passe « origine » est:

git remote show origin 
+7

Mais cette commande ne me montre pas combien de commits il y a eu d'origine depuis mon dernier tirage, n'est-ce pas? La façon dont je l'ai compris "git remote show origine" est une opération locale et ne passe pas par le réseau pour aller chercher de l'information. – Lernkurve

11

Une solution potentielle

Merci à Alan Haggai Alavi's solution Je suis venu avec le flux de travail potentiel suivant:

Etape 1:

git fetch origin 

Etape 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 

Etape 3:

git checkout master 
git branch -D localTempOfOriginMaster 
git merge origin/master 
+13

Pourquoi avez-vous besoin de créer une branche temporaire pour diff entre les révisions de la télécommande? vous pouvez juste 'git diff origing/master^origing/master ^^' –

+0

@ PabloMarin-Garcia: Merci. Je ne le savais pas à l'époque. – Lernkurve

126
git remote update && git status 

trouvé sur le answer-Check if pull needed in Git

git remote update pour mettre à jour vos références à distance. Ensuite, vous pouvez faire une de plusieurs choses, telles que:

  1. git status -uno vous dira si la branche que vous suivez est en avance, derrière ou a divergé. S'il ne dit rien, les variables locale et sont les mêmes.

  2. git show-branch *master vous montrera les validations dans toutes les branches dont les noms se terminent en master (par exemple master et origin/master).

Si vous utilisez -v avec git remote update vous pouvez voir quelles branches justement mis à jour, de sorte que vous n'avez pas vraiment besoin d'autres commandes.

+12

Ceci devrait être la réponse acceptée – mork

+0

La meilleure façon de le faire! – mrt

+0

Pas assez. Je dois faire un 'git pull ' par la suite dès que j'ai besoin de pousser, parce que la pointe de ma branche locale était derrière la contrepartie à distance. – Overdrivr

4

Ma question est régulière plutôt « quelque chose de nouveau ou changé en pension » pour WhatChanged est très pratique. J'ai trouvé here.

git whatchanged origin/master -n 1 
+0

'whatchanged' semble être obsolète: http://stackoverflow.com/a/18585297/33311 – Lernkurve

8

je viens d'utiliser

git remote update 
git status 

Ce dernier rapporte alors combien de commits derrière mon local est. (Le cas échéant)

puis

git pull origin master 

apporter mon locale à jour :)

0

git status ne montre toujours la différence entre le maître et l'origine/maître même après une extraction. Si vous voulez la combinaison git fetch origin && git status au travail, vous devez spécifier les informations de suivi entre la branche locale et l'origine:

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

Pour branche master:

git branch --set-upstream-to=origin/master master 
Questions connexes