153 votes

Comment utiliser Git pour trouver des changements entre local et distant

Ici sont deux questions différentes, mais je pense qu'ils sont liés.

  1. Lors de l'utilisation de Git, comment puis-je trouver les changements que j'ai commis localement, mais n'ont pas encore poussé à une branche distante? Je suis à la recherche de quelque chose de similaire à l'Mercurial commande hg outgoing.

  2. Lors de l'utilisation de Git, comment puis-je trouver ce que les modifications d'une branche à distance a avant de faire un pull? Je suis à la recherche de quelque chose de similaire à l'Mercurial commande hg incoming.

Pour la deuxième: est-il un moyen de voir ce qui est disponible et puis de choisir les changements que je veux tirer?

113voto

Richard Hansen Points 13044

À partir de Git 1.7.0, il existe une syntaxe spéciale qui vous permet de faire référence de manière générique à la branche en amont: @{u} ou @{upstream} .

Pour imiter hg incoming :

 git log ..@{u}
 

Pour imiter hg outgoing :

 git log @{u}..
 

J'utilise les alias incoming et outgoing pour faciliter l'utilisation de ce qui précède:

 git config --global alias.incoming '!git remote update -p; git log ..@{u}'
git config --global alias.outgoing 'log @{u}..'
 

99voto

Jordi Bunster Points 3840

Git ne pouvez pas envoyer ce genre d'informations sur le réseau, comme le Hg peut. Mais vous pouvez l'exécuter git fetch (ce qui est plus comme hg pull que hg fetch) pour aller chercher de nouvelles validations de vos serveurs distants.

Donc, si vous avez une branche appelée master et d'une distance appelée origin, après l'exécution de l' git fetch, vous devriez également avoir une branche appelée origin/master. Vous pouvez ensuite obtenir l' git log de tous les commits qui master doit être un sur-ensemble de l' origin/master en effectuant git log master..origin/master. Inverser les deux pour obtenir le contraire.

Un de mes amis, David Dollar, a créé un couple de git scripts shell pour simuler hg incoming/outgoing. Vous pouvez les trouver à http://github.com/ddollar/git-utils.

43voto

Martin Redmond Points 2084

Pas une réponse complète mais git fetch va tirer le repo distant et ne pas faire de fusion. Vous pouvez alors faire un

 git diff master origine / master 

34voto

Greg Hewgill Points 356191
  1. Utilisez "git log origin..HEAD"

  2. Utilisez "git fetch" suivi de "git log HEAD..origin". Vous pouvez sélectionner des commits individuels en utilisant les identifiants de validation listés.

Ce qui précède suppose, bien sûr, que "origine" est le nom de votre branche de suivi à distance (si vous avez utilisé clone avec les options par défaut).

22voto

robinst Points 9249

Il y a aussi ceci, pour comparer toutes les branches:

 git log --branches --not --remotes=origin
 

Voici ce que dit la page de manuel de log de git à ce sujet:

Affiche tous les commits se trouvant dans l'une des branches locales, mais pas dans les branches de suivi à distance d'origine (ce que vous n'avez pas cette origine).

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