2009-08-25 4 views
139

Possible en double:
Using Git how do I find modified files between local and remoteComment puis-je voir les validations entrantes dans git?

Comment puis-je voir commits entrants dans git? Ou mieux encore, voir ce que je viens de git fetch/git pull ed?

Editer: Pour clarifier la question: quelqu'un me dit que, pour obtenir quelques corrections, je devrais tirer de leur référentiel. Mon but est de voir quels sont leurs changements avant Je les accepte. git pull fusionne automatiquement, ce qui n'est pas ce que je veux. git fetch va les attraper sans fusionner, mais je ne sais pas comment voir exactement ce que je viens de tirer. La raison pour le phrasé d'origine est que j'utilise normalement Mercurial, où la commande serait hg incoming <repo name here> — une commande pour laquelle git semble manquer un analogue.

Répondre

149

incoming ISN Ce n'est pas un mappage direct dans git parce que vous pouvez (et je le fais souvent) avoir plusieurs repos, et chaque repo a plusieurs branches.

S'il y avait un équivalent de commande entrante de hg, il serait probablement ceci:

git fetch && git log ..origin/master 

C'est, « aller prendre tous les trucs de l'amont, puis comparer ma branche en cours contre la branche maîtresse en amont. "

De même, sortant serait ceci:

git fetch && git log origin/master.. 

Dans la pratique, je viens de taper les manuellement (même si je créé un alias pour l'un d'eux), car il est facile d'avoir beaucoup de branches locales de suivi et d'être suivi par beaucoup de branches à distance et n'ont aucun mal à le garder ensemble.

+6

Vous pouvez également utiliser 'git diff --stat origin/master' pour voir le diffstat que' git pull' montre après une fusion réussie. –

+1

Merci pour cette réponse @Dustin! Puis-je demander, je ne comprends pas vraiment la magie derrière 'log ..origin/master' que signifient les points? – gideon

+0

Ce n'est pas tellement magique, c'est indiqué dans le synopsis de 'git log' et décrit comme la deuxième option dans la section options de [la page man] (http://schacon.github.com/git/git-log. html) qui mène ensuite à la [gitrevisions] (http://schacon.github.com/git/gitrevisions.html) doc qui va dans beaucoup plus de détails. – Dustin

1

Il n'y a rien de tel que les utilisateurs "commits entrants" commettent localement et les poussent. Je voudrais ouvrir gitx ou gitk (qui vient avec git) et vérifier à quoi ressemble le repos ... Je pense que cela vous donnera une vision claire.

utilisation: gitk --all à voir.

+0

S'il vous plaît voir ma question clarifiée. –

+0

Ahh, je vois ce que tu veux dire maintenant, la réponse de Dustin est morte. merci pour plus de détails. –

10

Vous souhaiterez peut-être examiner la différence entre deux référentiels. Suppose que vous avez une branche locale « maître » et une branche de suivi à distance « origine/maître », où d'autres personnes commettent leur code, vous pouvez obtenir différentes statistiques sur les différences entre les deux branches:

git diff --summary master origin/master 

git diff --stat master origin/master 

git diff --numstat master origin/master 

git diff --dirstat master origin/master 

git diff --shortstat master origin/master 

git diff --name-only master origin/master 

git diff master origin/master 
+1

question n'est pas sur la visualisation de la diff, il s'agit de visualiser les commits et tirer que l'utilisateur a fait. –

+1

C'est vrai, mais j'ai l'impression que Netzpirat est proche; si cela me montrait des bûches à la place des diffs, ce serait parfait. –

80

Vous pouvez également être intéressé par git whatchanged qui donne un bon aperçu des modifications qui ont été apportées dans une gamme de commits.

Si vous voulez passer en revue ce que vous êtes sur le point de tirer, faire une git fetch première, qui met à jour que les branches de suivi locales pour le dépôt distant (et pas de vos branches), puis utiliser une commande qui montre vous les nouveaux commits que vous êtes sur le point de tirer.Par exemple:

git whatchanged ..origin 

C'est un raccourci pour montrer les commits entre « l'ancêtre commun de là où je suis maintenant et l'origine » par « origine ».

+0

ahh, j'aime mieux que d'utiliser git log –

6

Lorsqu'une personne vous demande de tirer, elle vous donne l'URL de dépôt et une branche (par défaut master).

Je venais de faire

git fetch URL branch 

suivi d'un (dans l'ordre décroissant de préférence):

# note 3 dots in next 3 commands 
gitk HEAD...FETCH_HEAD 
    # shows all commits on both sides since the "fork" point 
gitk --cherry-pick HEAD...FETCH_HEAD 
    # as above but skips identical patches so you really see the differences 
git log --graph --boundary --left-right --cherry-pick --decorate HEAD...FETCH_HEAD 
    # I have a nice alias for this; it's the text mode eqvt of the above 

J'utilise aussi "tig" parfois, mais ce usecase spécifique (voir à la fois côtés) n'est pas bien desservie par tig.

Cependant, si vous le ramener à deux points (ce qui peut correspondre à votre question réelle de plus près, mais je préfère quand même les 3 versions de points), vous pouvez faire

tig HEAD..FETCH_HEAD 

Voici les alias pour plus de commodité:

incoming = !sh -c 'git fetch && git log --graph --boundary --left-right --cherry-pick --decorate HEAD..FETCH_HEAD' 
outgoing = !sh -c 'git fetch && git log --graph --boundary --left-right --cherry-pick --decorate FETCH_HEAD..HEAD'