Comment défaire 'git fetch'

j'ai juste ajouté supplémentaires remote A mon repo B et puis exécutez git fetch A Comment puis-je annuler chercher? Si je viens de le supprimer remote A:git remote remove A1 Est-ce que ça déferait le fetch?

mise à jour:

git remote add A path/to/A

git fetch A

Le dessus est commandes que j'ai donc exécuter dans le résultat que j'ai obtenu toutes les branches par les cheveux de mon repo B cependant j'ai juste besoin d'une branche spécifique de repo A et j'ai besoin d'elle pour aller dans le dossier spécifique sur repo B mais c'est une autre histoire fusionner le code entre deux dépôts git différents

12
demandé sur jlafay 2016-02-24 05:00:14

3 réponses

Vous pouvez annuler extrait de la télécommande A simplement en enlevant cette télécommande:

git remote remove A

maintenant il suffit de l'ajouter à nouveau et de ne récupérer qu'une seule branche:

git remote add A <path/to/repository>
git fetch A <name of branch>
16
répondu qzb 2016-02-24 13:50:28

c'est difficile1 "annuler" un git fetch, mais il n'est jamais2 aucune raison de besoin annuler git fetch.

n'oubliez pas, ce git fetch fait est d'appeler la télécommande, obtenir une liste des branches-nom à SHA-1 mappings, apporter des commits et autres objets dont vous avez besoin afin de les stocker dans votre dépôt, puis mettre à jour vos branches de suivi à distance de sorte qu'ils pointent vers le courant de la télécommande (à partir du moment où vous venez de l'appeler jusqu') des conseils de branche. Cela n'a aucun effet sur votre travail-de l'arborescence de fichiers, et si vous exécutez git fetch encore demain, tout travail fait aujourd'hui peut être omis demain. Si vous réussissez à défaire le fetch, le seul demain sera à refaire le travail accompli aujourd'hui, c'est donc une perte nette: vous venez juste de passer un peu d'effort de sorte que votre git devront apporter le plus de code sur le réseau de demain.

cela dit, c'est l'heure des notes en bas de page. : -)


1Ce n'est pas difficile si vous avez remote reflogs( ce que vous faites probablement): utilisez simplement les Remote reflogs pour trouver les branches de suivi à distance mises à jour dans le fetch le plus récent-cette même information peut encore être disponible dans le FETCH_HEAD fichier-puis utiliser git update-ref pour pointer ces références vers leurs entrées précédentes. Mais cela laissera extraites des objets dans votre référentiel, donc pour vraiment effacer vous devez ensuite supprimer les entrées de refrog intermédiaire, puis lancer git gc --prune=now, qui nécessite beaucoup de soins et jetez objets non référencés, pas seulement ceux apportés par les plus récents fetch.

2je pense que l'on pourrait faire valoir que "de manquer d'espace disque" pourrait être une raison pour le faire, surtout si un objet de grande taille a été accidentellement poussé à la distance et sera supprimée à partir de la télécommande par la prochaine fetch. De travail dans un système de fichiers qui est hors de l'espace est difficile en général, bien que, et je ne suis pas sûr que je voudrais faire beaucoup ici autre que déplacer le dépôt entier ailleurs (quelque part sans les problèmes d'espace disque).

9
répondu torek 2016-02-24 03:31:03

j'ai vraiment aimé la réponse de torek, mais il ne vous fournit pas la commande "update reflogs", qui est exactement ce que je cherchais. J'ai trouvé ceci dans une autre réponse inverser un git fetch, alors je le laisse ici pour simplifier la recherche des autres.

supposons que vous avez votre origin à distance et en local develop la branche est basée sur master, mais votre local master derrière origin/master (mais vous ne le voyez pas encore, parce que vous n'avez pas récupéré origin encore). Donc exécuter git fetch va ajouter de nouveaux commits origin/master et tags à votre repo local. Dans certains cas, vous ne voulez pas voir ces nouvelles propagations réduiront la lisibilité de votre historique.

cela dit, vous pouvez annuler" git fetch en faisant:

git update-ref refs/remotes/origin/master refs/remotes/origin/master@{1}

Tout ce qu'il fait est juste changements origin/master pointeur à l'état précédent. Peut-être que vous aurez à jouer avec {n} un peu pour obtenir l'état exact, mais dans général, il peut aider.

0
répondu The Godfather 2018-03-27 11:33:02