98 votes

fatal : argument ambigu 'origin' : révision inconnue ou chemin ne se trouvant pas dans l'arbre de travail

J'ai utilisé git diff origin souvent dans le passé.

Dans un environnement différent, cela ne fonctionne pas. Je ne sais pas pourquoi.

user@host> git diff origin
fatal: ambiguous argument 'origin': unknown revision or path 
       not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

Statut :

user@host> git status
On branch master
nothing to commit, working directory clean

Des télécommandes :

user@host> git remote -v
origin  https://example.com/repos/djangotools (fetch)
origin  https://example.com/repos/djangotools (push)

Version :

user@host> git --version
git version 2.7.4

Avec " git version 1.8.1.4 ". git diff origin travaux.

BTW Je vois le même message d'erreur si j'utilise "git diff origin/master".

BTW2, je pense que le "/master" est redondant. Le défaut le plus sain est de comparer la branche locale avec la même branche sur le site distant.

0 votes

Une télécommande comme origin seul n'est jamais attendu dans aucun git diff commandement.

0 votes

@ElpieKay ça marche, je l'ai testé avec git version 1.8.1.4

1 votes

J'ai essayé. Oui, cela fonctionne. Il semble git diff origin est le diminutif de git diff master origin/master si la branche actuelle est master . Si la branche actuelle n'a pas de branche de suivi à distance, cela ne devrait pas fonctionner.

66voto

Chris Points 3249

El git diff attend généralement un ou plusieurs hashs de commit pour générer votre diff. Vous semblez fournir le nom d'un fichier distant.

Si vous aviez une branche nommée origin le hash de commit en tête de la branche aurait été utilisé si vous aviez indiqué origin à la commande diff, mais actuellement (sans branche correspondante) la commande produira l'erreur que vous voyez. Il est possible que vous travailliez auparavant avec une branche nommée origin .

Une alternative, si vous essayez de voir la différence entre votre branche locale et une branche sur un site distant, serait quelque chose du genre :

git diff origin/<branchname>

git diff <branchname> origin/<branchname>

Ou d'autres variantes documentées .

Editar: Après avoir lu plus loin, je me rends compte que j'ai légèrement tort, git diff origin est un raccourci pour la comparaison avec la tête du remote spécifié, donc git diff origin = git diff origin/HEAD ( comparer la branche git locale avec la branche distante ? , Pourquoi "origin/HEAD" est-il affiché lors de l'exécution de "git branch -r" ? )

Il semble que votre origine n'ait pas de HEAD, dans mon cas, c'est parce que mon dépôt distant est un dépôt nu qui n'a jamais eu de HEAD défini.

Running git branch -r vous montrera si origin/HEAD et, si c'est le cas, sur quelle branche il pointe (par ex. origin/HEAD -> origin/<branchname> ).

3 votes

Merci beaucoup. Oui, git branch -r est vide dans un repo et dans l'autre il n'est pas vide. C'est pourquoi git diff origin fonctionne dans un repo et pas dans l'autre.

0 votes

<branchname> ici est substitué à votre branche spécifique nommée.

29voto

cosmicdust Points 136

Je me suis retrouvé dans la même situation où des commandes telles que git diff origin o git diff origin master a produit l'erreur signalée dans la question, à savoir Fatal: ambiguous argument...

Pour résoudre la situation, j'ai lancé la commande

git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master

pour définir refs/remotes/origin/HEAD pour pointer vers la branche origin/master.

Avant d'exécuter cette commande, la sortie de git branch -a était :

* master
  remotes/origin/master

Après avoir exécuté la commande, l'erreur ne s'est plus produite et le résultat de la commande git branch -a était :

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

(D'autres réponses ont déjà identifié que la source de l'erreur est HEAD qui n'est pas réglé pour l'origine. Mais j'ai pensé qu'il était utile de fournir une commande qui peut être utilisée pour corriger l'erreur en question, même si elle peut être évidente pour certains utilisateurs).


Informations complémentaires :

Pour toute personne désireuse d'expérimenter et de faire des allers-retours entre l'activation et la désactivation de refs/remotes/origin/HEAD, voici quelques exemples.

Pour dérégler :
git remote set-head origin --delete

A régler :
(autres moyens, outre celui indiqué au début de cette réponse)
git remote set-head origin master pour définir explicitement l'origine/la tête
OU
git remote set-head origin --auto pour interroger la télécommande et définir automatiquement l'origine/HEAD sur la branche actuelle de la télécommande.

Références :

  • Ce site Réponse SO
  • Ce site Commentaire SO et sa réponse associée
  • git remote --help voir la description de set-head
  • git symbolic-ref --help

18voto

Thuo Ng'ang'a Points 61

Pour ceux qui rencontrent cette erreur sur CI/CD, l'ajout de la ligne ci-dessous a fonctionné pour moi sur mon flux de travail GitHub Actions CI/CD juste après avoir exécuté pip install pyflakes diff-cover :

git fetch origin master:refs/remotes/origin/master

Voici un extrait de la solution tirée du dépôt github de diff-cover :

Solution diff-cover fait correspondre les fichiers sources dans le rapport XML de couverture de couverture avec les fichiers sources dans le diff git. Pour cette raison, il est important que les chemins relatifs des fichiers correspondent. Si vous utilisez coverage.py pour générer le rapport XML de couverture, assurez-vous que vous exécutez diff-cover depuis le même répertoire de travail.

J'ai obtenu la solution sur les liens ci-dessous. Il s'agit d'un document diff-cover erreur.

https://diff-cover.readthedocs.io/en/latest//README.html https://github.com/Bachmann1234/diff_cover/blob/master/README.rst

J'espère que cela vous aidera :-).

4voto

sfinkens Points 491

Si origin pointe vers un répertoire nu sur le disque, cette erreur peut se produire si ce répertoire a été déplacé (même si vous mettez à jour les remotes de la copie de travail). Par exemple

$ mv /path/to/origin /somewhere/else
$ git remote set-url origin /somewhere/else
$ git diff origin/master
fatal: ambiguous argument 'origin': unknown revision or path not in the working tree.

Tirer une fois de la nouvelle origin résout le problème :

$ git stash
$ git pull origin master
$ git stash pop

4voto

Roma Points 140

Parfois, les choses peuvent être plus simples. Je suis venu ici avec le même problème et j'ai essayé toutes les suggestions. Mais j'ai découvert plus tard que le problème venait simplement du fait que le chemin d'accès au fichier local était différent et que je me trouvais dans un autre dossier :-)

eg -

~/myproject/mygitrepo/app/$ git diff app/TestFile.txt

aurait dû être

~/myproject/mygitrepo/app/$ git diff TestFile.txt

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