10
votes

Pourquoi est-ce que je reçois "Erreur: Impossible de pousser des références"?

J'ai un référentiel git distant et un local que je travaille. Chaque fois que je fais des changements localement, je les poussez à la télécommande. Ensuite, j'ai parfois un "git commit" sur la télécommande pour stocker les modifications apportées aux fichiers distants.

Je ne modifie pas le référentiel distant directement du tout. Je viens de commettre les changements. Et je suis un développeur unique, personne d'autre ne travaille sur ce repos.

Pourquoi est-ce que je reçois une erreur qui, d'après ce que je sais, signifie que je dois tirer d'abord?

Je ne veux pas tirer parce que les fichiers de repos distants sont obsolètes et perdre mes changements locaux. C'est vraiment ennuyeux, pourquoi cela se passe-t-il? Et comment puis-je réparer sans avoir à tirer ou à recréer le référentiel? (Comme vous pouvez le constater, il s'agit d'un type de style de contrôle de version de sous -ersion ici)

edit - l'erreur: xxx

git

2 commentaires

Que voulez-vous dire que vous faites un "GIT COMMIS" sur le référentiel isolé? Le référentiel à distance est-il un repo nu? Vous devriez généralement seulement pousser à un repo nu, mais vous ne pouvez pas vous engager dans un repo nu, alors je suis un peu confus à ce que vous essayez de faire. Pouvez-vous montrer un exemple des commandes réelles que vous exécutez et la sortie réelle que vous obtenez?


Eh bien, j'étais un peu méfiant de cette partie, c'est pourquoi je le mentionne aussi. Les repos sont créés avec 'git init'. Je commis un commit sur le référentiel à distance, car je ne vois pas les changements dans ce référentiel autrement. Je ajoute du code pour montrer l'erreur


5 Réponses :


11
votes

Ce que vous devriez faire est de créer le référentiel à distance comme un référentiel nu. Un référentiel nu n'est que le repo git, sans paiement en cours (c'est-à-dire qu'il s'agit simplement du contenu du .git Dir dans un repo git régulier, donc il contient des objets et des réfs, mais il n'a pas d'index ou de copie de travail de la hiérarchie de fichiers). Si vous essayez d'appuyer sur un référentiel non nu, la copie de travail sera synchronisée avec ce qui est engagé et provoquera les types de problèmes que vous voyez ici.

Vous pouvez créer un référentiel nu en utilisant git init --bare repo.git . Ou vous pouvez cloner un référentiel existant comme un repo à nu en utilisant git clone -bare original-repo nouveau-repo.git .

Si vous souhaitez avoir une copie décédée du référentiel sur votre serveur, vous devrez créer un nouveau repo non nu sur le serveur, puis vous retirerez dans ce repo du repo nu que vous appuyez sur.


3 commentaires

Donc, si je comprends bien, l'idée est que le référentiel nu est comme un indice qui a une manière interne de représenter les données sauvegardées, puis de cloner une copie de travail (ou de sauvegarde).


@Spyrroroque fondamentalement. Un référentiel nu stocke uniquement l'historique, les succursales et les balises, mais n'a pas de copie de travail d'une version particulière, la manière dont un repo normal fait. Vous pouvez cloner un repo nu pour créer un repo normal qui a une copie de travail, que vous faites votre travail.


Merci d'avoir clarifié, cela sauve la journée à coup sûr :)



8
votes

Cela signifie toujours que vous n'avez pas synchronisé le référentiel distant avec une répétition locale, vous devez donc d'abord les synchroniser à l'aide de la commande Git Tirez comme suit: XXX Pré>

Après ce processus, vous allez Les synchronisez-les, puis vous pouvez appuyer sur les modifications apportées au repo à distance par suivi: p>

git add [filename/directory]  
git commit -m"input your message"   
git remote add origin https://github.com//yourname.git     
git push origin master


1 commentaires

Git Push Origin Master --force, forcer la poussée a fonctionné pour moi.



7
votes

Voici une autre option.

git reset --mixed origin/master
git add .
git commit -m "Your message"
git push origin master


0 commentaires

0
votes

J'ai fait face à un problème similaire et le commandement suivant a fonctionné. GIT Push --Se-Uptstream Origin Master


0 commentaires

-1
votes

J'ai également confronté la même erreur et gaspillé beaucoup de temps, voici la solution finale.

  1. Lorsque vous utilisez Git Push Origor Master Nous obtenons une erreur afin de forcer la poussée. alors utilisez la deuxième option. Cela a fonctionné pour moi.

  2. Master d'origine push git --force


0 commentaires