web-dev-qa-db-fra.com

Ne peut pas pousser dans GitHub

Je suis nouveau sur GitHub . Aujourd'hui, j'ai rencontré un problème lorsque j'essayais de transmettre mon code à GitHub.

Pushing to [email protected]:519ebayproject/519ebayproject.git
To [email protected]:519ebayproject/519ebayproject.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to Push some refs to '[email protected]:519ebayproject/519ebayproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git Push --help' for details.

Je n'ai encore rien mis dans le référentiel, alors pourquoi dois-je tirer quelque chose?

657
user1353717

Cela peut entraîner la perte de validations du référentiel distant. utilisez-le avec précaution.

Si vous ne souhaitez pas fusionner la branche distante dans votre branche locale (voir différences avec git diff ) et que vous voulez forcer, utilisez la commande Push avec -f

git Push -f Origin <branch>

Origin est le nom de votre remote repo.

Généralement, la commande refuse de mettre à jour une référence distante qui n'est pas un ancêtre de la référence locale utilisée pour la remplacer. Cet indicateur désactive le contrôle. Cela peut entraîner la perte de validations du référentiel distant. utilisez-le avec précaution.

686
Nick Rolando

Comme le message vous le dit,

Fusionner les modifications distantes (par exemple, "git pull")

Utilisez git pull pour extraire les dernières modifications du référentiel distant vers votre référentiel local. Dans ce cas, l'extraction des modifications nécessitera une fusion car vous avez apporté des modifications à votre référentiel local. 

Je vais vous donner un exemple et une photo à expliquer. Supposons que votre dernier appel auprès de Origin/branch ait été à Commit B. Vous avez terminé et engagé du travail (Commit C). En même temps, quelqu'un d'autre a terminé son travail et l'a poussé vers Origin/Branch (Commit D). Il faudra fusionner ces deux branches.

local branch:                         --- Commit C 
                                    /
                                   /
                                  /
Origin/branch: Commit A ------ Commit B ---- Commit D

Parce que vous êtes celui qui veut pousser, Git vous oblige à effectuer la fusion. Pour ce faire, vous devez d’abord extraire les modifications de Origin/branch.

local branch:                         --- Commit C -- Commit E
                                    /               /           
                                   /               /             
                                  /               /               
Origin/branch: Commit A ------ Commit B ---- Commit D 

Une fois la fusion terminée, vous pourrez désormais avancer rapidement dans Origin/Branch vers Commit E en appliquant vos modifications. 

Git nécessite que vous gériez vous-même les fusions, car une fusion peut entraîner des conflits.

220
Jake Greene

Avez-vous mis à jour votre code avant de pousser?

Utilisez git pull Origin master avant de pousser quoi que ce soit.

Je suppose que vous utilisez Origin comme nom pour votre télécommande.

Vous devez tirer avant Push pour mettre à jour votre référentiel local avant de pousser quelque chose (juste au cas où quelqu'un d'autre aurait déjà mis à jour le code sur github.com). Cela aide à résoudre les conflits localement. 

191
AYK

Cela se produit normalement lorsque vous git commit et tentez de git Push modifier avant git pulling sur cette branche x où une autre personne a déjà apporté des modifications.

Le débit normal serait comme ci-dessous,  

ÉTAPE 1 : git stash vos modifications locales non validées sur cette branche.

ÉTAPE 2 : git pull Origin branch_name -v à pull and merge pour les modifications engagées localement sur cette branche (donne à cette fusion un message et corrige les conflits éventuels.)

ÉTAPE 3 : git stash pop les modifications stashed (Ensuite, vous pouvez effectuer des validations sur des fichiers vidés si vous le souhaitez ou bien appliquer les modifications déjà validées (STEP4) et créer de nouvelles validations dans des fichiers.

ÉTAPE 4 : git Push Origin branch_name -v les modifications fusionnées.

Remplacez branch_name par master (pour la branche master).

121
prayagupd

Parfois, nous avons oublié de tirer et avons effectué de nombreux travaux dans l'environnement local.

Si quelqu'un veut pousser sans tirer,

git Push --force

travaille. Ce n'est pas recommandé lorsque vous travaillez avec d'autres personnes, mais si votre travail est une chose simple ou un projet de jouet personnel, ce sera une solution rapide.

45
Teo

Certains d'entre vous risquent de recevoir cette erreur car Git ne sait pas quelle branche vous essayez de pousser.

Si votre message d'erreur comprend également

error: failed to Push some refs to '[email protected]:jkubicek/my_proj.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. If you did not intend to Push that branch, you may want to
hint: specify branches to Push or set the 'Push.default' configuration
hint: variable to 'current' or 'upstream' to Push only the current branch.

ensuite, vous voudrez peut-être suivre les conseils pratiques de Jim Kubicek, Configurez Git pour n’ajouter que la branche actuelle, pour définir la branche par défaut sur current.

git config --global Push.default current
35
xiatica

Première solution simple

  • Essayez cette commande git Push -f Origin master.
  • Cette commande va forcément faire toutes les modifications nécessaires à votre référentiel.

Solution recommandée

  • Supprimer le répertoire .git du dossier.
  • Puis exécutez ces commandes:

    git init
    git add .
    git commit -m "First Commit"
    git remote add Origin [url]
    git Push -u Origin master
    

OR

git Push -f Origin master 

Utilisez uniquement git Push -f Origin master si -u ne fonctionne pas pour vous.

Cela résoudra presque toutes les erreurs survenant lors de la transmission de vos fichiers.

25
Smit Patel
git pull Origin branch_name --rebase

Cela a fonctionné pour moi - la commande git pull Origin branch_name --rebase extraira d'abord les modifications de la branche distante, puis de la variable rebase actuelle.

25
Pyuri Sahu

J'ai eu le même problème, ce que j'ai fait, c'est que je l'ai d'abord poussé de force en utilisant cette 

git Push --force

Je l'ai fait après avoir validé les fichiers et obtenu une erreur telle que vous l'avez obtenue.Il a validé tous les fichiers et les a poussés… .. Ensuite, la prochaine fois que j'ai poussé vers le github .J'ai fait ce qu'il m'avait demandé de faire et c'était bien alors. J'espère que cela fonctionne pour vous aussi :)

20
Kailash Bhalaki

En plus des réponses ci-dessus, les éléments suivants ont fonctionné pour moi: -

Scénario -

  1. J'ai poussé my_branch vers Origin avec succès.
  2. J'ai fait quelques changements de plus.
  3. Lorsque j'ai essayé de relancer (après avoir ajouté, bien sûr), j'ai eu l'erreur mentionnée ci-dessus.

Solution -

 1. git checkout **my_branch**
 2. git add, commit your changes.
 3. git pull Origin **my_branch** (not Origin, master, or develop)
 4. git Push Origin **my_branch**

 Proof

18
Bhavuk Mathur

Je l'ai mentionné dans mon tutoriel, Comment utiliser GitHub: Un tutoriel pour les débutants.

Lorsque vous créez un nouveau référentiel sur GitHub, GitHub peut vous demander de créer un fichier Lisez-moi. Si vous créez un fichier lisez-moi directement sur GitHub, vous devrez d'abord faire une demande "pull" avant que la demande "Push" soit réussie . fichiers, puis "Pousser" tous les fichiers vers GitHub:

git pull https://github.com/thomas07vt/MyFirstRepo.git master

git Push https://github.com/thomas07vt/MyFirstRepo.git master
12
Thomas07vt

Je recevais le message d'erreur mentionné ci-dessus lorsque j'ai essayé de pousser ma branche actuelle foobar:

git checkout foobar
git Push Origin foo

Il s'avère que j'avais deux branches locales qui suivaient la même branche distante:

foo -> Origin/foo (some old branch)
foobar -> Origin/foo (my current working branch)

Cela a fonctionné pour moi de pousser ma branche actuelle en utilisant:

git Push Origin foobar:foo

... et à nettoyer avec git branch -d

6
Marco

git Push -f Origin nom de la branche

Utilisez la commande ci-dessus uniquement si vous êtes certain de ne pas avoir besoin du code de branche distante, sinon fusionnez d'abord puis transmettez le code

6
VIKAS KOHLI

Si vous ne souhaitez pas intégrer votre projet actuel (et éventuellement faire face à des conflits de fusion que vous ne vous souciez pas de résoudre) et que vous ne souhaitez pas créer une autre branche (cela sera fastidieux de gérer une autre 'ne veut pas faire de commandes git force permanentes et risquées (et même après avoir lu ce qu’elles font, je suis souvent étonné des conséquences qui pourraient en découler). 

Solution : Vous pouvez simplement faire glisser le contenu de votre dossier dans un autre dossier, tirer le projet dans votre dossier maintenant vide, faire glisser le contenu extrait dans la corbeille, puis faire glisser votre projet dans le dossier. Vous devriez être capable de pousser correctement et d'obtenir les résultats souhaités. Cela me prend littéralement moins de 10 secondes.

Aux personnes qui me diraient que cela ne convient pas sans citer de conséquences ou qui me disent d'utiliser une commande qui me cause des ennuis futurs, je dis: "Cette méthode me prend littéralement moins de 10 secondes." Si je rencontre une commande git dont la mise en œuvre prend moins de 10 secondes et qui a exactement le même effet, je l’adopterai. Jusque-là, j'utilise cette méthode. 

L'un des inconvénients de cette méthode est que votre historique de validation apparaîtra de manière linéaire lorsque vous fusionnerez dans une branche sans que la fusion ne soit documentée. Cela peut ne pas être la meilleure méthode lorsque vous travaillez avec des groupes. Travailler sur les branches dans ces cas!

5
ScottyBlades

J'ai eu un problème similaire et il s'est avéré que mon flux de travail pour garder ma succursale à jour était en faute. Je faisais ce qui suit:

Dans mon «maître» local

git fetch upstream
git merge upstream/master --ff-only

puis de retour dans ma branche locale

git rebase master

Cela a bien fonctionné pour un flux précédent, mais pas avec github. Le git rebase était le problème ici qui posait des problèmes de synchronisation (et je dois admettre que c’était quelque chose que j’avais dû accepter sans rien comprendre) et me mettait malheureusement dans une position où git Push -f devenait probablement l’option la plus simple. Pas bon.

Mon nouveau flux consiste à mettre à jour directement la branche en utilisant git merge comme suit:

Dans mon agence locale

git fetch upstream
git merge upstream/master

Pas d'avance rapide, car j'aurai fait des changements de parcours dans la branche locale.

Comme vous pouvez probablement le constater, je ne suis pas un expert, mais je suis sûr que ce flux de travail évitera probablement les problèmes spécifiques que j'ai rencontrés.

4
Component 10

Je viens d'avoir le même problème, mais dans mon cas, j'avais tapé la mauvaise branche sur la télécommande. Donc, il semble que ce soit une autre source de ce problème ... Vérifiez bien que vous appuyez sur la branche appropriée.

4
longda

Le nom de votre branche est-il identique au nom de la branche distante?

Si non, vous devriez extraire une nouvelle branche du même nom que la branche distante et essayer de nouveau Push it.

Supposons que la branche distante que vous voulez envoyer est [ testing ] et que votre branche locale porte le nom [ test ].

Si vous n’êtes pas dans test branch, commencez par y accéder.

git checkout test

Puis ouvrez une nouvelle branche et nommez-la testing .

git checkout -b testing

Maintenant, il est temps de le pousser:

git Push [remote repo] testing
3
fox323

J'ai résoudre ce problème à mon référentiel GIT. Pas besoin de rebase ou force commettre dans ce cas. Utilisez les étapes ci-dessous pour résoudre ce problème -

local_barnch> git branch --set-upstream to=Origin/<local_branch_name> 

local_barnch>git pull Origin <local_branch_name>

local_barnch> git branch --set-upstream to=Origin/master

local_barnch>git Push Origin <local_branch_name>

j'espère que ça va aider.

3
Sai prateek

J'ai rencontré le même problème et il s'est avéré que je me trouvais dans une branche (locale) différente de celle que je pensais ET la branche locale correcte était en retard dans les commits de la télécommande.

Ma solution: extraire la bonne branche, sélectionner le commit de l'autre branche locale, git pull et git Push

3
Ramon Fincken

Dans mon cas, j'avais "mybranch" vérifié, et j'avais git pull, donc je ne pouvais pas comprendre pourquoi le Push ne fonctionnait pas. Finalement, j'ai réalisé que je poussais la mauvaise branche. Je tapais git Push Origin master au lieu de git Push Origin mybranch.

Donc, si vous avez déjà fait git pull et recevez toujours ce message, assurez-vous que vous poussez la bonne branche.

3
wisbucky

J'obtenais une erreur similaire en transmettant les dernières modifications à un référentiel Git nu que j'utilise pour gitweb . Dans mon cas, je n’ai apporté aucune modification au référentiel nu, j’ai donc simplement supprimé mon référentiel nu et cloné à nouveau:

git clone --bare <source repo path> <target bare repo path>
2
Hemant

Une autre option: renommer localement votre branche en quelque chose de nouveau.

Vous pourrez alors le placer dans le référentiel distant, par exemple si c'est votre manière de conserver une copie (sauvegarde) et de vous assurer que rien ne soit perdu. 

Vous pouvez aller chercher une copie locale dans la branche distante et examiner les différences entre (i) ce que la télécommande avait (avec l'ancien nom de la branche) et (ii) ce que vous avez (avec le nouveau nom de la branche) et décider quoi faire. . Puisque vous n'étiez pas au courant des différences de la télécommande (d'où le problème), simplement fusionner ou forcer des changements quelque part est beaucoup trop brutal.

Examinez les différences, choisissez la branche sur laquelle vous souhaitez travailler, sélectionnez les modifications souhaitées de l'autre branche ou annulez les modifications que vous ne souhaitez pas sur la branche que vous avez, etc.

Ensuite, vous devriez être en mesure de décider si vous voulez forcer votre version propre sur la télécommande, ou ajouter de nouvelles modifications, etc.

2
user3070485

Une autre solution consiste à faire avancer la tête de la télécommande en faisant un autre commit si vous le pouvez. Après avoir tiré cette tête avancée dans la sous-arborescence locale, vous pourrez alors appuyer à nouveau dessus. 

2
9swampy

Le problème avec la commande Push est que votre référentiel local et distant ne correspond pas. SI vous initialisez le fichier Lisez-moi par défaut lors de la création d'un nouveau référentiel à partir de git hub, la branche principale est automatiquement créée. Cependant, lorsque vous essayez de Push, cela n’a aucune branche. vous ne pouvez pas appuyer sur ... La meilleure pratique consiste donc à créer un dépôt sans initialisation par défaut du fichier Lisez-moi.

1
Suman Astani

utilisez git pull https://github.com/username/repository C'est parce que le référentiel Github et le référentiel distant ne sont pas synchronisés. Si vous pull le repo puis Push tout sera synchronisé et l'erreur disparaîtra.

`

0
Mahi

Si, par hasard, git pull imprime Already up-to-date, vous pouvez vérifier le paramètre global git Push.default (dans ~/.gitconfig). Réglez-le sur simple s'il était dans matching. La réponse ci-dessous explique pourquoi:

Git - Quelle est la difference entre Push.default "matching" et "simple"

En outre, il est utile de vérifier si votre agence locale est obsolète en utilisant git remote show Origin et effectuez un pull si nécessaire.

git pull imprime déjà up-to-date

Solution:

vous pouvez être créé un référentiel/projet sur le serveur distant et y ajouter un fichier, puis créé à nouveau un dossier dans votre répertoire local et initialisé git git init - il s’agit du error , vous ne devez pas créer git init en local, clonez le projet dans votre section locale à l'aide de git clone

puis tire

0
noob_no1

Une autre cause de ce problème (apparemment pas si commun) ...

Mon serveur était derrière ~ 12 heures quand j'ai fait un Push

J'ai configuré NTP sur le serveur SYNC mon horloge. 

J'ai exécuté un nouveau git Push qui a provoqué l'erreur décrite dans ce post.

0
XO.

Ce problème est généralement dû à la création d'un fichier readme.md, comptabilisé comme une validation, qui n'est pas synchronisé localement sur le système et qui manque derrière la tête. Une requête git pull s'affiche donc. Vous pouvez essayer d'éviter le fichier lisez-moi, puis essayez de le valider. Cela a fonctionné dans mon cas.

0
Aman Mishra