126 votes

Comment vérifier les différences entre un référentiel local et GitHub avant de le fusionner

Avant d'utiliser pull, je veux vérifier s'il y a des différences entre ma version locale et GitHub master.

Comment puis-je le faire?

253voto

Mark Longair Points 93104

git pull est vraiment équivalent à exécuter git fetch puis git merge. Le git fetch met à jour vos "branches de suivi à distance" - généralement celles 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 dépôt distant qui sont mises à jour lorsque vous faites git fetch (ou un git push réussi).

Donc, supposez que vous ayez un distant appelé origin qui se réfère à votre dépôt GitHub, vous feriez :

git fetch origin

... et ensuite faites :

git diff master origin/master

... pour 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 une bonne idée.

3 votes

Si vous avez configuré le suivi à distance, alors les commandes deviennent un peu plus simples : 'git fetch' pour récupérer, 'git diff ..@{u}' pour voir les différences. Je ne peux jamais garder droit origin, master et origin/master, donc les commandes courtes aident beaucoup

3 votes

J'ai essayé ta méthode, et je n'ai obtenu aucune sortie de git diff master origin/master et son contraire, mais git status me dit Votre branche est en avance de 'origin/master' de 4 commits. Que se passe-t-il?

0 votes

Si git status affiche Votre branche est en avance sur 'origin/master' de 4 commits., vous devrez mettre en scène et valider les modifications git add . && git commit -m "Initial commit" avant d'exécuter git diff master origin/master

47voto

braitsch Points 3353

Si vous n'êtes pas intéressé par les détails que git diff produit, vous pouvez simplement exécuter git cherry qui affichera une liste des commits de votre branche de suivi à distance qui sont en avance par rapport à votre branche locale.

Par exemple :

git fetch origin
git cherry master origin/master

affichera quelque chose comme :

+ 2642039b1a4c4d4345a0d02f79ccc3690e19d9b1
+ a4870f9fbde61d2d657e97b72b61f46d1fd265a9

Cela indique qu'il y a deux commits dans ma branche de suivi à distance qui n'ont pas été fusionnés dans ma branche locale.

Cela fonctionne également dans l'autre sens :

git cherry origin/master master

Il vous montrera une liste de commits locaux que vous n'avez pas encore poussés vers votre dépôt distant.

2 votes

Merci, c'est exactement ce dont j'avais besoin. Juste pour être clair à ce sujet : Si le résultat de git cherry est vide, alors il n'y a rien à choisir et mon dépôt local est à jour, n'est-ce pas ?

4 votes

Vous pouvez également utiliser l'option verbose -v, pour afficher les messages des commits. Par exemple : git cherry -v origin/master master affichera : + 2642039b1a4c4d4345a0d02f79ccc3690e19d9b1 Fixed bug

0 votes

C'est beau.

13voto

user2817654 Points 21

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

git log origin/master ^master

Cela montre les commits qui sont dans origin/master, mais pas dans master.

Vous pouvez également le faire dans le sens inverse lors de l'exécution de git pull pour vérifier quels commits seront soumis au remote.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X