erreur git: échec de l'envoi de certaines références à distance

450

Pour une raison quelconque, je ne peux pas pousser maintenant, alors que je pouvais le faire hier. Peut-être que j'ai foiré des configs ou quelque chose.

Voici ce qui se passe:

Quand j'utilise le git push origin master

gitbashscr

À quoi ressemble mon répertoire de travail et mon référentiel distant:

Capture d'écran du dossier de fichiers Windows avec ces répertoires: .git, css, js.  Et ces fichiers: index.php, readme, setsu.php.  Le mot "local" avec une flèche pointe vers le dossier css.  Ci-dessous, capture d'écran avec en-tête "github" et un dossier css et un fichier index.php

leipzy
la source
7
il semble que votre dépôt local ne soit pas synchronisé avec le dépôt git. as-tu essayé de faire du git pull?
R11G
1
oui, mais je n'ai aucune idée de la syntaxe suivante après git pull, il dit git pull <remote> <branch>, pouvez-vous me laisser voir un exemple de syntaxe pour git pull?
leipzy
1
Vérifiez cette question similaire - stackoverflow.com/questions/18588974/…
R11G
3
@ R11G merci monsieur! ce lien m'a aidé stackoverflow.com/a/18589043/3626672
leipzy
2
J'ai eu cette erreur sur un nouveau dépôt. Cela a aidé: stackoverflow.com/a/6518774/2067690
HumanInDisguise

Réponses:

619

Si le dépôt GitHub a vu de nouveaux commits poussés, alors que vous travailliez localement, je vous conseillerais d'utiliser:

git pull --rebase
git push

La syntaxe complète est:

git pull --rebase origin master
git push origin master

Avec Git 2.6+ (septembre 2015), après avoir fait (une fois)

git config --global pull.rebase true
git config --global rebase.autoStash true

Un simple git pullsuffirait.
(Remarque: avec Git 2.27 Q2 2020 , un merge.autostashest également disponible pour votre tirage régulier, sans rebase)

De cette façon, vous rejoueriez (la --rebasepartie) vos commits locaux en plus de la nouvelle mise à jour origin/master(ou origin/yourBranch:) git pull origin yourBranch.

Voir un exemple plus complet dans le chapitre 6 Pull with rebase du Git Pocket Book .

Je recommanderais un:

# add and commit first
git push -u origin master

Cela établirait une relation de suivi entre votre branche principale locale et sa branche en amont.
Après cela, toute poussée future pour cette branche peut être effectuée avec un simple:

git push

Voir " Pourquoi dois-je pousser explicitement une nouvelle branche? ".


Étant donné que l'OP a déjà réinitialisé et refait sa validation en plus de origin/master:

git reset --mixed origin/master
git add .
git commit -m "This is a new commit for what I originally planned to be amended"
git push origin master

Ce n'est pas nécessaire pull --rebase.

Remarque: git reset --mixed origin/masterpeut également être écrit git reset origin/master, car l' --mixedoption est celle par défaut lors de l'utilisation git reset.

VonC
la source
est-il correct d'exécuter votre git pull suggéré --rebase ...? parce que j'ai déjà fait> git reset --mixed origin / master> git add. > git commit -m "Ceci est un nouveau commit pour ce que j'avais initialement prévu d'être un amendmend"> git push origin master suggéré ici stackoverflow.com/questions/18588974/… btw votre réponse semble utile monsieur
leipzy
3
Pour moi, j'avais juste besoin de lancer "git commit". :(
Tyler
Merci, correction d'un problème stupide avec Git LFS, je me suis abandonné à devoir utiliser la ligne de commande à partir de maintenant haha.
Tyler C
2
Vraiment super .. les commandes ci-dessous ont fonctionné pour moi ... git reset --mixed origin / master git add. git commit -m "Ceci est un nouveau commit pour ce que j'avais initialement prévu de modifier" git push origin master Merci @VonC
Hari Narayanan
1
Merci ça marche! Je cherchais des heures pour cette solution!
Redion Xhepa
96

Quelqu'un at-il essayé:

git push -f origin master

Cela devrait résoudre le problème.

EDIT: Sur la base du commentaire de @Mehdi ci-dessous, je dois clarifier quelque chose —force pushing. La commande git ci-dessus ne fonctionne en toute sécurité que pour le premier commit. S'il y avait déjà des validations, des demandes d'extraction ou des branches dans le précédent, cela réinitialise tout cela et le remet à zéro. Si c'est le cas, veuillez vous référer à la réponse détaillée de @VonC pour une meilleure solution.

cagcak
la source
25
Fonctionne mais mal, veuillez ne pas l'utiliser sauf si vous savez ce que vous faites. (vous ne savez probablement pas ce que vous faites si vous cherchez dans SO)
Mehdi
3
Si vous essayez -f/ --forceil est toujours plus sûr d'utiliser à la --force-with-leaseplace, ce qui s'interrompra s'il y a des changements en aval qui seraient encombrés par la poussée. --force-with-leaseest nécessaire pour de nombreuses situations de rebasage quotidiennes, mais --forcene devrait presque jamais être nécessaire.
Joshua Goldberg
63

Si vous venez d'utiliser git initet d'avoir ajouté vos fichiers avec git add .ou quelque chose de similaire et que vous avez ajouté votre branche distante, il se peut que vous n'ayez commis ( git commit -m 'commit message') rien localement pour pousser vers la télécommande ... J'ai juste eu cette erreur et c'était ma problème.

ironcladmvtm
la source
1
vient de rencontrer cela. La commande de validation n'a pas fonctionné pendant l'ajout de git. bon appel. Merci
jgritten
1
Merci mec! C'est ça. Je pensais avoir engagé mes changements. Maintenant, git push -u origin master fonctionne très bien.
tleo
36

J'ai eu le même problème. J'obtenais ce problème parce que je n'avais fait aucune validation, pas même la validation initiale et j'essayais toujours de pousser.

Une fois que j'ai fait git commit -m "your msg"et puis tout a bien fonctionné.

ppmakeitcount
la source
8
Cela n'a pas beaucoup de sens. La question initiale concerne le git local derrière . En aucun cas "être en retard" ne peut être résolu en faisant un commit local!
GhostCat
Oh j'oublie aussi de m'engager: p
Shams Nahid
Il est également possible qu'il ne vous permette pas de pousser avec un commit vide
mboy
3
Je viens d'avoir ce problème et j'ai oublié de m'engager. Le message d'erreur devrait être plus clair
Ivan Topić
1
Cela s'applique à moi car je recevais ce message d'erreur exact et cette solution a résolu mon problème.
Diego Fortes
19

Renommez votre branche puis appuyez sur, par exemple:

git branch -m new-name
git push -u new-name

Cela a fonctionné pour moi.

p8ul
la source
1
cela a fonctionné, mais veuillez expliquer pourquoi nous devrions le faire
kanlukasz
Wow, cela a vraiment fonctionné, mais pourquoi? J'ai eu un trait d' union dans mon nom de la branche locale: my-branch_wont_push. Une fois que je retitré à my_branch_wont_push, puis git push -u origin my_branch_wont_pushtravaillé pour moi.
cdabel
13

Je trouve la solution à ce problème dans l'aide de github.

Vous pouvez le voir à partir de: Gérer les erreurs d'avance non rapide

Ça dit:

Vous pouvez résoudre ce problème en récupérant et en fusionnant les modifications apportées sur la branche distante avec les modifications que vous avez apportées localement:

$ git fetch origin
# Fetches updates made to an online repository
$ git merge origin branch
# Merges updates made online with your local work

Ou, vous pouvez simplement utiliser git pull pour exécuter les deux commandes à la fois:

$ git pull origin branch
# Grabs online updates and merges them with your local work
Sealter
la source
1
C'est le processus normal chaque fois que les choses fonctionnent comme prévu. Cela n'aide rien quand git pense qu'il est déjà à jour comme l'a demandé @rubyandcoffee.
Tim
10
  1. git init

  2. git remote add origin https://gitlab.com/crew-chief-systems/bot

  3. git remote -v (pour vérifier le référentiel actuel)

  4. git add -A(ajouter tous les fichiers)

  5. git commit -m 'Added my project'

  6. git pull --rebase origin master

  7. git push origin master

James Siva
la source
avant de pousser le code que vous devez extraire du référentiel
James Siva
vous pouvez simplement écrire comme git pull
James Siva
6

J'avais rencontré le même problème, résolu avec les étapes ci-dessous.

  1. git init
  2. git add .
  3. git commit -m 'Add your commit message'
  4. git remote add origin https://[email protected]/User_name/sample.git

    (Au-dessus de l'URL https: //[email protected]/nom_utilisateur/sample.git fait référence à l'URL de votre projet de compartiment de bits)

  5. git push -u origin master

allusion

vérifiez si votre compte git hub est lié à votre git local en utilisant:

git config --global user.email "[email protected]"
git config --global user.name "Your Name"
Divya
la source
4

Si vous utilisez gerrit, cela peut être dû à un Change-id inapproprié dans la validation. Essayez de supprimer le Change-Id et voyez ce qui se passe.

Jim Sime
la source
4

N'oubliez pas de valider vos modifications avant de passer au dépôt Github. Cela pourrait résoudre votre problème.

Alf Moh
la source
4

Ne pas valider les modifications initiales avant de pousser provoque également le problème

Griffe
la source
3

avant de pousser, vous devez ajouter et valider les modifications ou faire git push -f origin master

Kinnera Reddy
la source
3
git push origin {your_local_branch}:{your_remote_branch}

Si votre succursale locale et votre succursale distante partagent le même nom, pouvez-vous alors omettre le nom de votre succursale locale, utilisez simplement git push {your_remote_branch}. Sinon, il générera cette erreur.

Yitong Feng
la source
3

J'ai suivi les étapes suivantes et cela a fonctionné pour moi.

 rm -rf .git
 git init
 git add .
 git commit -m"first message"
 git remote add origin "LINK"
 git push -u origin master
ASHISH RANJAN
la source
2

Cela peut arriver lorsque vous n'avez aucun fichier. Essayez de créer un fichier texte puis suivez les commandes suivantes

git add .
git commit -m "first commit"
git push --set-upstream origin master
sushil suthar
la source
2

Pour moi, le problème était que je n'ai pas ajouté les fichiers avant la validation.

git add .

git commit -m "your msg"

Rohitsam
la source
2

Meilleure utilisation rm -rf .git/hooks, puis essayez git push

Binod Singh
la source
Intéressant, cela m'a aidé dans un cas où il n'y avait clairement aucun commit sur l'origine (pas besoin de rebaser).
pevik
Pourquoi voudriez-vous jeter tous vos crochets? peut-être faire une sauvegarde en premier?
MSpreij
2

J'ai créé un dépôt vide dans GitHub et j'ai mon code localement. J'ai rencontré le même problème maintenant, en suivant la séquence ci-dessous,

git init
git commit -m 'Initial Commit'
git remote add origin https://github.com/kavinraju/Repo-Name.git
git add .
git push -u origin master

LE PROBLÈME ÉTAIT: J'ai essayé de valider avant de transférer les fichiers que j'ai.

Nous devons donc mettre en scène les fichiers et ensuite nous engager.

C'est la bonne séquence.

git init
git add .
git commit -m 'Initial Commit'
git remote add origin https://github.com/kavinraju/Repo-Name.git
git push -u origin master

Puisque j'exécute d'abord la mauvaise séquence, j'exécute simplement les commandes ci-dessous

git add .
git commit -m 'Initial Commit'
git push -u origin master
Kavin Raju S
la source
1

Je ne sais pas si cela s'applique, mais le correctif pour moi était de valider quelque chose localement après git init. Ensuite, j'ai poussé à distance en utilisant --set-upstream ...

user1889992
la source
1

Création d'une nouvelle branche résolue pour moi:

git checkout -b <nameOfNewBranch>

Comme prévu, pas besoin de fusionner puisque la branche précédente était entièrement contenue dans la nouvelle.

Santiago M. Quintero
la source
1
J'avais exactement ce problème, j'étais sur feature22 et je le faisais git push origin feature22-fix, mais je feature22-fixn'ai pas quitté ni local ni distant, j'ai donc dû d'abord vérifier la succursale localement, puis pousser
Honey
1

Si vous essayez d'initialiser un répertoire avec un référentiel GitHub existant, vous devez vous assurer de valider les modifications.

Essayez de créer un fichier:

touch initial
git add initial
git commit -m "initial commit"
git push -u origin master

Cela placera un fichier nommé initial que vous pourrez supprimer plus tard.

J'espère que cette réponse vous aidera! Bonne chance!

Andreas Bigger
la source
1

Vous devez donner de la force

Il suffit de pousser - forcer.

Ankit
la source
1

Dans mon cas, c'est mon huskycolis qui interdit la poussée.

> husky - pre-push hook failed (add --no-verify to bypass)
> husky - to debug, use 'npm run prepush'
error: failed to push some refs to 'https://[email protected]/username/my-api.git'

Pour le pousser avec force, il suffit d'exécuter git push origin master --no-verify

J'ai couru npm run prepushpour voir déboguer l'erreur, et c'était la cause:

npm ERR! code ELOCKVERIFY
npm ERR! Errors were found in your npm-shrinkwrap.json, run  npm install  to fix them.
npm ERR!     Invalid: lock file's [email protected] does not satisfy loopback-utils@^0.9.0

Exécutez-le npm installet validez-le, et le problème est résolu.

Jee Mok
la source
1

fais ces

git rm --cached *
git add .
git commit -m"upload"
git push --set-upstream origin master

Bon codage!

Do Nhu Vy
la source
1

Essayez cette commande git,

git push origin master –f
git push origin master --force
Zin Myo Swe
la source
0

Eh bien, si aucune des réponses ci-dessus ne fonctionne et si vous avez gâché quelque chose ssh-addrécemment. Essayer

ssh-add -D
Abhisek
la source
0

Pour les utilisateurs de sourcetree

Effectuez d'abord un commit initial ou assurez-vous que vous n'avez pas de modifications non validées, puis à côté de sourcetree il y a un "REMOTES", faites un clic droit dessus, puis cliquez sur 'Push to origin'. Voilà.

Bowie Chang
la source
0

Cela m'arrive car j'avais un tag avec le même que la branche et j'ai essayé de pousser la branche à distance.

Buminda
la source
0

Dans mon cas, le problème était (étrangement) qu'il n'y avait pas de branche appelée master. J'ai pris le dépôt de Github.

D063520
la source
0

Je poussais la branche de typographie 'evelop' existante que je n'avais pas encore extraite, et à la place, je voulais pousser une branche appelée 'enveloppe'. Donc la branche doit être existante / checkout sur la copie de travail locale afin de pousser bien sûr, donc cette erreur, de ne pas faire de faute de frappe.

FentomX1
la source