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
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>
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).
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.