2011-05-14 4 views

Répondre

155

git pull est vraiment équivalent à exécuter git fetch puis git merge. Le git fetch met à jour vos soi-disant "branches de suivi à distance" - typiquement ce sont ceux qui ressemblent à origin/master, github/experiment, etc. que vous voyez avec git branch -r. Ce sont comme un cache de l'état des branches dans le référentiel distant qui sont mises à jour lorsque vous faites git fetch (ou un succès git push).

Ainsi, supposons que vous avez un appelé à distance origin qui fait référence à votre dépôt GitHub, vous feriez:

git fetch origin 

... puis faites:

git diff master origin/master 

... afin de voir la différence entre votre master, et celui sur GitHub. Si vous êtes satisfait de ces différences, vous pouvez les fusionner avec git merge origin/master, en supposant que master est votre branche actuelle. Personnellement, je pense que faire git fetch et git merge séparément est généralement a good idea.

+0

Merci pour la bonne explication. –

+2

si vous avez configuré le suivi à distance alors les commandes deviennent un peu plus simples: 'git fetch' pour aller chercher, 'git diff .. @ {u}' pour voir les différences.Je ne peux jamais garder l'origine, le master, et l'origine/master droit, donc les commandes courtes aident beaucoup – ChrisBob

+0

Je vous ai essayé la méthode, et n'a obtenu aucune sortie de 'git diff master origin/master' et son contraire, mais' git status' dit moi 'Votre branche est en avance sur 'origin/master' par 4 commits. Que se passe-t-il? – Jason

27

Si vous n'êtes pas intéressé par les détails que les sorties git diff vous pouvez simplement exécuter git cherry qui produira une liste de validations votre branche de suivi à distance a devant votre branche locale.

Par exemple:

git fetch origin 
git cherry master origin/master 

Affichera quelque chose comme:

+ 2642039b1a4c4d4345a0d02f79ccc3690e19d9b1 
+ a4870f9fbde61d2d657e97b72b61f46d1fd265a9 

Indique qu'il ya deux commits dans ma branche de suivi à distance qui n'a pas été intégré dans ma branche locale.

Cela fonctionne aussi dans l'autre sens:

git cherry origin/master master 

vous montrera une liste des commits locaux que vous ne l'avez pas encore transféré à votre dépôt distant.

+1

Merci, juste ce dont j'avais besoin. Juste pour être clair sur ce point: Si le résultat git cherry est vide, il n'y a rien pour la cueillette des cerises et mon rapport local est à jour, n'est-ce pas? – eyecatchUp

+1

Oui, c'est correct. – braitsch

+0

Vous pouvez également utiliser l'option verbeuse '-v' pour afficher les messages de validation. Par exemple: 'git cherry -v origin/master master' affichera:' + 2642039b1a4c4d4345a0d02f79ccc3690e19d9b1 Correction d'un bug' – Yoluk

4

Et une autre commande utile pour ce faire (après git fetch) est la suivante:

git log origin/master ^master 

Cela montre les commits qui sont à l'origine/maître, mais pas en maître. Vous pouvez également le faire en face de git pull, pour vérifier quels commits seront envoyés à distance.

Questions connexes