web-dev-qa-db-fra.com

Comment prévisualiser git-pull sans faire de récupération?

Est-ce même possible?

En gros, il y a un référentiel distant d'où je tire en utilisant simplement:

git pull

Maintenant, j'aimerais avoir un aperçu de ce que cette attraction changerait (un diff) sans rien toucher de mon côté. La raison en est que ce que je tire n'est peut-être pas "bon" et je veux que quelqu'un d'autre le répare avant de rendre mon référentiel "sale".

190
Milan Babuškov

Après avoir fait un git fetch, fait une git log HEAD..Origin/master pour afficher les entrées du journal entre votre dernière validation commune et la branche principale de l’origine. Pour afficher les diffs, utilisez soit git log -p HEAD..Origin/master pour afficher chaque patch, ou git diff HEAD...Origin/master (trois points et non deux) pour afficher un seul diff.

Normalement, il n'est pas nécessaire d'annuler une extraction, car une extraction met uniquement à jour les branches remote et aucune des vos. Si vous n'êtes pas prêt à extraire et à fusionner toutes les commits distants, vous pouvez utiliser git cherry-pick pour n'accepter que les commits spécifiques à distance souhaités. Plus tard, quand vous serez prêt à tout avoir, un git pull fusionnera avec le reste des commits.

Mise à jour: je ne suis pas tout à fait sûr de savoir pourquoi vous voulez éviter l'utilisation de git fetch. Tout ce que git fetch fait, c'est mettre à jour votre copie locale des branches distantes. Cette copie locale n'a rien à voir avec aucune de vos branches, ni avec des modifications locales non validées. J'ai entendu parler de gens qui exécutent git chercher dans un travail cron parce que c'est tellement sûr. (Je ne recommanderais normalement pas cela, cependant).

214
Greg Hewgill

Je pense que git fetch est ce que vous cherchez.

Il extraira les modifications et les objets sans les enregistrer dans l'index de votre référentiel local.

Ils peuvent être fusionnés ultérieurement avec git merge .

page de manuel

Edit: Explication complémentaire

Directement à partir du cours intensif Git- SVN lien

Maintenant, comment obtenez-vous les nouvelles modifications d'un référentiel distant? Vous allez les chercher:

git fetch http://Host.xz/path/to/repo.git/ 

À ce stade, ils sont dans votre référentiel et vous pouvez les examiner en utilisant:

git log Origin 

Vous pouvez également comparer les modifications. Vous pouvez également utiliser le journal git HEAD..Origin pour afficher uniquement les modifications que vous n'avez pas dans votre branche. Ensuite, si vous souhaitez les fusionner, faites:

git merge Origin

Notez que si vous ne spécifiez pas de branche à extraire, le nom par défaut de la télécommande sera suivi.

La lecture de la page de manuel vous donnera honnêtement la meilleure compréhension des options et de la façon de l’utiliser.

J'essaie simplement de le faire par exemples et par mémoire, je n'ai pas actuellement de boîte à tester. Vous devriez regarder:

git log -p //log with diff

Une extraction peut être annulée avec git reset --hard ( lien ), mais tous les changements non validés dans votre arborescence seront perdus. ainsi que les modifications que vous avez récupérées.

42

Vous pouvez récupérer depuis un dépôt distant, voir les différences, puis extraire ou fusionner.

Ceci est un exemple pour un dépôt distant appelé Origin et une branche appelée master effectuant le suivi de la branche distante Origin/master:

git checkout master                                                  
git fetch                                        
git diff Origin/master
git pull --rebase Origin master
18
Antonio Bardazzi

J'ai créé un alias git personnalisé pour le faire pour moi:

alias.changes=!git log --name-status HEAD..

avec ça tu peux faire ça:

$git fetch
$git changes Origin

Cela vous donnera un moyen simple et agréable de prévisualiser les modifications avant de faire un merge.

7
Matthias

Je suis peut-être en retard à la fête, mais c'est quelque chose qui m'a trop embêté. D'après mon expérience, je préférerais voir quelles modifications sont en attente que de mettre à jour ma copie de travail et de gérer ces modifications.

Cela va dans le ~/.gitconfig fichier:

[alias]
        diffpull=!git fetch && git diff HEAD..@{u}

Il récupère la branche en cours, puis fait un diff entre la copie de travail et cette branche extraite. Donc, vous ne devriez voir que les changements qui viendraient avec git pull.

2
Andy P

J'utilise ces deux commandes et je peux voir les fichiers à changer.

  1. La première exécution de git fetch, cela donne un résultat comme ceci (une partie du résultat):

    ... 
     72f8433..c8af041 développer -> origine/développement 
     ...

Cette opération nous donne deux ID de validation, le premier est l'ancien et le second sera le nouveau.

  1. Puis comparez ces deux commits en utilisant git diff

    git diff 72f8433..c8af041 | grep "diff --git"

Cette commande listera les fichiers qui seront mis à jour:

diff --git a/app/controller/xxxx.php b/app/controller/xxxx.php
diff --git a/app/view/yyyy.php b/app/view/yyyy.php

Par exemple app/controller/xxxx.php et app/view/yyyy.php sera mis à jour.

La comparaison de deux commits avec git diff imprime tous les fichiers mis à jour avec les lignes modifiées, mais avec grep, il recherche et obtient uniquement les lignes qui contiennent diff --git de la sortie.

1
cowboycb