Je suis nouveau sur GitHub . Aujourd'hui, j'ai rencontré un problème lorsque j'essayais de pousser mon code vers 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 poussé dans le référentiel, alors pourquoi dois-je retirer quelque chose?
Réponses:
Si vous ne souhaitez pas fusionner la branche distante dans votre branche locale (voir les différences avec git diff ) et souhaitez effectuer une poussée forcée, utilisez la commande push avec -f
où
origin
est le nom de votre dépôt à distance .la source
$ git pull origin master -v
mais ça donne une erreurfatal: refusing to merge unrelated histories
. Ensuite, j'ai essayé cela et cela a fonctionné et mes fichiers locaux sont apparus sur github remote repo.Comme le message vous le dit,
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 fournir un exemple et une photo pour expliquer. Supposons que votre dernière extraction depuis l'origine / la branche se soit produite au Commit B. Vous avez terminé et validé un certain travail (Commit C). Dans le même temps, quelqu'un d'autre a terminé son travail et l'a poussé à l'origine / branche (Commit D). Il devra y avoir une fusion entre ces deux branches.
Parce que c'est vous qui voulez pousser, Git vous oblige à effectuer la fusion. Pour ce faire, vous devez d'abord extraire les modifications de l'origine / de la branche.
Après avoir terminé la fusion, vous serez désormais autorisé à avancer rapidement l'origine / la branche vers Commit E en poussant vos modifications.
Git nécessite que vous gériez vous-même les fusions, car une fusion peut entraîner des conflits.
la source
git pull
aussi impriméAlready up-to-date
. Il s'est avéré que je n'étais pas sur la branche si j'étais, mais une branche HEAD détachée (peut-être d'une fusion échouée?). C'était évident après avoir courugit branch
. Après avoir exécutégit checkout mybranch
tout a fonctionné comme prévu.Avez-vous mis à jour votre code avant de pousser?
À utiliser
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 de pousser, 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
github.com
). Cela aide à résoudre les conflits localement.la source
git pull origin master
git se plaint que'origin' does not appear to be a git repository
git remote --verbose
pour voir toutes les télécommandes configurées sous votre dossier git. Les informations affichées à l'écran comprendront également des chemins "[email protected]" ou des chemins HTTPS, à partir desquels vous devriez être en mesure d'identifier où pousser. J'espère que cela t'aides !git pull origin master
montrant déjà à jour. mais lorsque vous essayez de pousser sur origin_branch, dites le même avertissement mentionné en question. Toute suggestion !!git push -f <remote> <branch>
par exemple git push origin <your_local_branch> vérifier ce fil .Cela se produit normalement lorsque vous
git commit
essayez de faire desgit push
changements avantgit pulling
sur cette branchex
où quelqu'un d'autre a déjà fait des changements.Le flux 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
pour effectuerpull and merge
les modifications validées localement sur cette branche ( transmettez un message à cette fusion et corrigez les conflits, le cas échéant ) .ÉTAPE 3 :
git stash pop
lesstash
modifications ed ( Ensuite, vous pouvez effectuer des validations sur les fichiers sautés si vous le souhaitez ou pousser les modifications déjà validées (STEP4) en premier et effectuer une nouvelle validation dans les fichiers plus tard. )ÉTAPE 4 :
git push origin branch_name -v
les modifications fusionnées.Remplacez
branch_name
parmaster
(pour lamaster
branche).la source
commit
? Ne devriez-vous pas valider vos modifications aprèsstash pop
?Première et simple solution (non recommandée)
git push -f origin master
.Solution recommandée
Si cela ne fonctionne pas, suivez-le 🔰
.git
répertoire du dossier.Exécutez ensuite ces commandes:
OU
N'utilisez que
git push -f origin master
si vous-u
ne travaillez pas pour vous.Cela résoudra presque tous les types d'erreurs se produisant lors de la transmission de vos fichiers.
la source
Parfois, nous avons oublié le tirage et avons fait beaucoup de travaux dans l'environnement local.
Si quelqu'un veut pousser sans tirer,
travaille. Ce n'est pas recommandé lorsque vous travaillez avec d'autres personnes, mais lorsque votre travail est une chose simple ou un projet de jouet personnel, ce sera une solution rapide.
la source
reset --hard
à un commit plus ancien puis en ai fait quelques autres. Ensuite, je voulais juste,push
mais le dépôt à distance n'était pas prêt à me le permettre. WarrenP pourrait en fait aider les apprenants en étant moins runique. Peut-être qu'il ne veut pas.Certains d'entre vous obtiennent peut-être cette erreur car Git ne sait pas quelle branche vous essayez de pousser.
Si votre message d'erreur comprend également
vous pouvez alors suivre les conseils pratiques de Jim Kubicek, Configurer Git pour ne pousser que la branche actuelle , pour définir la branche par défaut sur courant.
la source
Cela a fonctionné pour moi - la commande
git pull origin branch_name --rebase
va extraire les modifications de nom_branche distant au début, puisrebase
la branche actuelle en haut.la source
En plus des réponses ci-dessus, les éléments suivants ont fonctionné pour moi: -
Scénario -
Solution -
la source
--all
drapeau.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 ce
Je l'ai fait après avoir validé les fichiers et j'ai reçu une erreur comme vous l'avez fait. Il a validé tous les fichiers et il les a poussés. Ensuite, la prochaine fois que je poussais vers le github, j'ai fait ce qu'il m'avait demandé et tout allait bien. J'espère que cela fonctionne aussi pour vous :)
la source
git push --set-upstream origin master --force
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 Lisezmoi directement sur GitHub, vous devrez d'abord faire une demande «pull» avant que la demande «push» ne réussisse. Ces commandes «tireront» le référentiel distant, le fusionneront avec vos fichiers actuels, puis «repousseront» tous les fichiers vers GitHub:
la source
J'obtenais le message d'erreur mentionné ci-dessus lorsque j'ai essayé de pousser ma branche actuelle
foobar
:Il s'avère que j'avais deux succursales locales qui suivaient la même branche distante:
Cela a fonctionné pour moi de pousser ma branche actuelle en utilisant:
... et nettoyer avec
git branch -d
la source
git push -f nom de la branche d' origine
Utilisez la commande ci-dessus uniquement si vous êtes sûr de ne pas avoir besoin de code de branche distante, sinon fusionnez d'abord, puis appuyez sur le code
la source
Si vous ne voulez pas vous lancer dans votre projet actuel (et que vous risquez de faire face à des conflits de fusion que vous ne voulez pas résoudre) et que vous ne voulez pas créer une autre branche (ce sera fastidieux de gérer une autre branche), et vous ne Je ne veux pas faire de
force
commandes git risquées et permanentes (qui même après avoir lu ce qu'elles font, je suis souvent surpris des implications de le faire).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 correct dans le dossier. Vous devriez pouvoir pousser correctement et obtenir les résultats souhaités. Cela me prend littéralement moins de 10 secondes pour le faire.
Aux gens qui me diraient que ce n'est pas approprié sans citer de conséquences, ou aux gens qui me disent d'utiliser une commande qui me gêne à l'avenir, je dis: "Cette méthode me prend littéralement moins de 10 secondes." Si je rencontre une commande git qui prend moins de 10 secondes à implémenter et a exactement le même effet, je l'adopterai. Jusque-là, j'utilise cette méthode.
Un inconvénient de cette méthode est que votre historique de validation apparaîtra linéaire lorsque vous fusionnerez réellement dans une branche sans que la fusion soit documentée. Ce n'est peut-être pas la meilleure méthode lorsque vous travaillez avec des groupes. Travaillez sur les branches dans ces cas!
la source
Juste eu 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 que vous poussez vers la bonne branche.
la source
J'ai rencontré le même problème et il s'est avéré que j'étais sur une branche (locale) différente de ce que je pensais être ET que la branche locale correcte était en retard dans les validations à distance.
Ma solution: extraire la bonne branche, sélectionner le commit de l'autre branche locale, git pull et git push
la source
J'ai eu un problème similaire et il s'est avéré que mon flux de travail pour maintenir ma succursale à jour était en faute. Je faisais ce qui suit:
Dans mon «maître» local
puis de retour dans ma branche locale
Cela a bien fonctionné pour un flux git précédent, mais pas avec github. Le
git rebase
était le problème ici causant des problèmes avec la synchronisation (et je dois admettre que quelque chose que j'ai dû accepter sans comprendre pleinement) et , malheureusement , me mettre dans une position oùgit push -f
est probablement devenu l'option la plus facile. Pas bon.Mon nouveau flux consiste à mettre à jour la branche directement en utilisant
git merge
comme suit:Dans ma succursale locale
Pas d'avance rapide, car j'aurai bien sûr fait des changements dans la branche locale.
Comme vous pouvez probablement le constater, je ne suis pas un expert en git, mais je suis informé de manière fiable que ce flux de travail évitera probablement les problèmes spécifiques que j'ai rencontrés.
la source
Dans mon cas, j'avais "mybranch" vérifié et avait fait
git pull
, donc je ne pouvais pas comprendre pourquoi la poussée ne fonctionnait pas. Finalement, j'ai réalisé que je poussais la mauvaise branche. Je tapaisgit push origin master
au lieu degit push origin mybranch
.Donc, si vous avez déjà terminé
git pull
et recevez toujours ce message, assurez-vous de pousser la bonne branche.la source
Le nom de votre succursale est-il le même que le nom de la succursale distante?
Si non, vous devez extraire une nouvelle branche portant le même nom que la branche distante et réessayer de la pousser.
Supposons que la branche distante que vous souhaitez pousser soit [ testing ] et que votre branche locale soit nommée [ test ].
Si vous n'êtes pas dans la branche test , passez d'abord à celle-ci.
Ouvrez ensuite une nouvelle branche et nommez-la testing .
Maintenant, il est temps de pousser:
la source
$git branch -M <new_name>
pour renommer la branche locale.J'ai résolu ce problème dans mon référentiel GIT. Pas besoin de
rebase
ouforce
commettras dans ce cas. Utilisez les étapes ci-dessous pour résoudre ce problème -j'espère que cela vous aidera.
la source
Une autre solution consiste à faire avancer la tête de la télécommande en effectuant un autre commit si vous le pouvez. Après avoir tiré cette tête avancée dans la sous-arborescence locale, vous pourrez à nouveau la pousser.
la source
J'obtenais une erreur similaire en poussant les dernières modifications vers 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:
la source
Si vous êtes certain que personne n'a apporté de modifications à votre référentiel git et que vous travaillez sur la dernière version, cela
git pull
n'a pas de sens comme solution dans votre cœur ...C'est probablement ce qui s'est passé, vous avez utilisé
git commit --amend
Tutoriel ATLASSIEN: réécriture de l'historique
Cependant, il n'est pas recommandé d'effectuer
git commit --amend
si vous avez déjà poussé le commit vers GitHub , car "la modification ne modifie pas seulement le commit le plus récent, elle le remplace entièrement. Pour Git, cela ressemblera à un tout nouveau commit" ce qui signifie pour les autres développeurs de votre GitHub, l'historique ressemble à A-> B-> C mais pour vous, il ressemble à A-> B-> D, si GitHub vous le permetpush
, tout le monde devra corriger manuellement son historiqueC'est la raison pour laquelle vous obtenez le message d'erreur
! [rejected] master -> master (non-fast-forward)
, si vous savez que personne n'a retiré votre dernière modification, vous pouvez le fairegit push --force
, cela modifiera l'historique git dans votre référentiel public . Sinon ... vous pouvez effectuergit pull
, mais je crois que cela aura le même résultat que vous n'avez pas traverségit commit --amend
, cela créera un nouveau commit (ie: historique de git après git pull: A-> B-> C-> D )pour plus de détails: comment modifier votre dernier commit
la source
Autre option: renommer localement votre branche en quelque chose de nouveau.
Vous pourrez ensuite le pousser vers le référentiel distant, par exemple si c'est votre façon de conserver une copie (sauvegarde) et de vous assurer que rien ne se perd.
Vous pouvez récupérer la branche distante pour avoir une copie locale et examiner les différences entre (i) ce que la télécommande avait (avec l'ancien nom de branche) et (ii) ce que vous avez (avec le nouveau nom de branche), et décider quoi faire . Puisque vous n'étiez pas conscient des différences de la télécommande en premier lieu (d'où le problème), simplement fusionner ou forcer des changements quelque part est beaucoup trop brutal.
Regardez les différences, choisissez la branche sur laquelle vous souhaitez travailler, choisissez les modifications que vous souhaitez dans l'autre branche, ou annulez les modifications que vous ne voulez pas sur la branche que vous avez, etc.
Ensuite, vous devriez être en mesure de décider si vous souhaitez forcer votre version propre sur la télécommande, ou ajouter de nouvelles modifications, ou autre chose.
la source
Le problème avec la commande push est que votre référentiel local et distant ne correspond pas. Si vous initialisez le fichier Lisezmoi par défaut lors de la création d'un nouveau référentiel à partir de git hub, la branche principale est alors automatiquement créée. Cependant, lorsque vous essayez de pousser cela n'a aucune branche. vous ne pouvez pas pousser ... Donc, la meilleure pratique consiste à créer un dépôt sans initialisation du fichier Lisez-moi par défaut.
la source
Ce problème est généralement provoqué par la création d'un fichier readme.md, qui est considéré comme une validation, n'est pas synchronisé localement sur le système et manque derrière la tête, par conséquent, il affiche une demande d'extraction git. Vous pouvez essayer d'éviter le fichier readme, puis essayer de valider. Cela a fonctionné dans mon cas.
la source
Une autre cause de ce problème (apparemment pas si commun) ...
Mon serveur était en retard d'environ 12 heures quand j'ai fait un push
J'ai configuré NTP sur le serveur SYNC mon horloge.
J'ai exécuté un nouveau push git qui a conduit à l'erreur discutée dans ce post.
la source
Si par hasard
git pull
imprimeAlready up-to-date
alors vous voudrez peut-être vérifier lepush.default
paramètre git global (In~/.gitconfig
). Réglez-le sursimple
s'il était dedansmatching
. La réponse ci-dessous explique pourquoi:Git - Quelle est la différence entre push.default "matching" et "simple"
En outre, il vaut la peine de vérifier si votre succursale locale est obsolète
git remote show origin
et de faire un pull si nécessairela source
utiliser
git pull https://github.com/username/repository
Il est parce que le Github et les dépôts distants ne sont pas synchronisés. Si vouspull
le repo et puisPush
tout sera synchronisé et l'erreur disparaîtra."
la source
git pull
imprime déjàup-to-date
Solution:
vous pourriez être créé un référentiel / projet à distance (serveur) et y ajouter un fichier, puis à nouveau créé un dossier dans votre git local et initialisé
git init
- c'est l' erreur , vous ne devez pas créergit init
en local, au lieu de cela cloner le projet sur votre local en utilisantgit clone
puis tirez
la source