106 votes

Git refuse de récupérer dans la branche actuelle

J'ai mis en place un dépôt distant et je peux pousser de nouveaux changements vers celui-ci, mais je ne peux pas récupérer à partir de celui-ci, je reçois toujours le message d'erreur (plutôt cryptique) :

fatal: Refuser de récupérer dans la branche actuelle refs/heads/master d'un dépôt non nu
fatal: La fin distante a fermé la connexion de manière inattendue

Que cela signifie-t-il ? Que dois-je faire pour activer la récupération ?

(Notez que ce dépôt distant est uniquement utilisé comme sauvegarde, donc il devrait être une copie exacte de mon dépôt local. Je ne comprends vraiment pas pourquoi je peux pousser vers lui mais pas récupérer à partir de lui...)

Ma configuration ressemble à ceci :

[remote "origin"]
    url = ssh://blablablah
    fetch = +refs/*:refs/*
    mirror = true

0voto

Charles Stewart Points 7698

J'ai rencontré ce problème lorsque j'ai cloné un dépôt de manière irréfléchie au lieu de le récupérer, de sorte que les deux dépôts étaient des masters. Si vous n'avez pas travaillé sur le dépôt distant, vous pouvez corriger les choses avec les commandes de base de git comme suit : (1) supprimer le dépôt distant, (2) copier le dépôt local à la place du dépôt distant, (3) supprimer le dépôt local, puis (4) configurer le dépôt local en utilisant

git init; git fetch $REMOTE_GIT_REPOSITORY_URL  

Ensuite, git pull et git push feront les bonnes choses. L'avantage d'éviter git remote, selon la réponse plus efficace et plus fondée de Michael, est que vous n'avez pas besoin de réfléchir aux sémantiques des branches de suivi.

0voto

Hafiz Shehbaz Ali Points 1635

J'ai le même problème. Tout d'abord, j'essaie de récupérer en utilisant ceci

git fetch [remote_name] [branch_name] 

J'avais le même problème que vous mentionnez. Ensuite, j'ai essayé cette commande simple.

git pull [remote_name] [branch_name]

Notez que cela va récupérer et fusionner les modifications. Si vous utilisez le terminal, le fichier s'ouvre, nécessitant un message de validation. Avec ce message, vous pousserez la dernière validation. Essayez cette commande et vous pourrez finalement envoyer la demande.

git push [remote_name] [branch_name_local]

0voto

Christian Specht Points 15907

Êtes-vous effectivement entrer des commandes Git dans la ligne de commande, ou exécutez-vous l'exécutable Git à partir de votre propre code ?
Si vous l'exécutez à partir du code, êtes-vous sûr que Git tente de récupérer dans le répertoire local correct ?

Il y a deux façons possibles de le faire :

  1. Utilisez les options fournies par votre langage de programmation pour définir le bon répertoire de travail avant d'exécuter Git
    (exemple C#, parce que c'est ce que j'utilise)

  2. Passez toujours le paramètre -C à Git pour spécifier le répertoire du dépôt local.


J'ai un projet où j'appelle l'exécutable Git à partir du code C#, et j'ai obtenu le même message d'erreur que dans la question quand j'ai accidentellement oublié de définir le paramètre -C.

0voto

kxr Points 31

Quand vous voulez vraiment récupérer dans la branche actuelle - par exemple comme fetch -u origin mybranch:mybranch d'un dépôt jumeau (et ce n'est pas dû à une configuration bidon comme dans le cas de l'OP), vous pouvez le faire de manière plus pratique :

git pull [origin] --ff-only

Cela permet uniquement une mise à jour fast-forward, étendant un historique linéaire. Cela met déjà à jour l'index contrairement au fetch -u.

Si cela échoue en raison d'un historique de commits divergé et que vous voulez retrouver l'unité immédiatement (au lieu de créer des fusions en diamant, etc.), vous pouvez envisager de rebaser sur le distant - par exemple en faisant :

git pull --rebase[=interactive]

Ce qui peut être divisé en :

git fetch origin mybranch
# inspecter la situation de divergence
git rebase origin/mybranch mybranch [-i]...

-1voto

Adit choudhary Points 79

Fatal: Refuser de récupérer dans la branche actuelle refs/heads/BRANCHNAME d'un dépôt non nu

J'ai créé une branche BRANCHNAME localement puis exécuté la commande "git fetch upstream pull/ID/head:BRANCHNAME" et j'ai obtenu fatal: Refuser de récupérer dans la branche actuelle refs/heads/BRANCHNAME d'un dépôt non nu

ensuite j'ai supprimé la branche et appelé à nouveau la même commande, cela a fonctionné correctement.

En fait, je vérifiais la branche de la pull request.

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