Ne peut pas pousser à GitHub - ne cesse de dire le besoin de fusion
Je suis nouveau sur GitHub. Aujourd'hui j'ai rencontré un problème lorsque j'essayais de pousser mon code pour 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 pas poussé quoi que ce soit dans le référentiel encore, alors pourquoi ai-je besoin de tirer quelque chose?
- Notez que cela peut se produire pour de branches visitées précédemment localement, qui ont dû s'engage en amont, dans le référentiel. Est-il un moyen facile à juste rapide de l'avant une ancienne succursale ou tout simplement laisser git oublier dans le dépôt local?
- J'ai réussi à résoudre ce scénario à l'aide de git push-f' qui semblait rendre git oublier ses problèmes imaginaires 🙂
- vous pouvez consulter stackoverflow.com/questions/12650261/...
- Je me demande pourquoi elle rêve tant. Ce qui m'est arrivé une couple de fois. (et à chaque fois j'oublie comment résoudre le problème :P)
- Vu plaindre à ce sujet à partir de git nouveaux arrivants. La raison en est que lors de la création d'un nouveau projet sur GitHub, ils laissent une case à cocher "Initialiser avec readme" ou cliquez sur .gitignore/GPL options de façon à ce nouveau projet a déjà un commit ils n'ont pas localement, donc la confusion causée par l'erreur ci-dessus.
- l'option-f pour forcer la poussée est dangereux. J'ai simplement utilisé dans un projet d'équipe et 6 s'engage ont été "rayé", tout simplement supprimé depuis le serveur, et aucun moyen de les récupérer!
- mais GitHub lui-même recommande d'ajouter des fichier lisez-moi et si quelqu'un supprime, il vous invite à l'ajouter manuellement 🙂
- Sa tendance à la louange de git. Mais presque tous les développeurs qui j'ai parlé, privé d'accord qu'ils ont personnellement haine git. Maintenant qu'ils l'utilisation de git ils passent beaucoup plus de temps dans le contrôle de la source par rapport à ce qu'ils ont l'habitude de passer quand ils ont utilisé perforce ou TFS.
- Cette erreur vient également de poste de squash et d'essayer de pousser à distance
- J'ai eu le même problème, et il n'est pas résolu par la simple git pull -- tous. C'est en effet un nouveau repo, propre, mais avec la licence ajoutée, un service ajouté pour indiquer les progrès réalisés sur le fichier README.md. Avant ces outre, il travaillait bien à partir de la ligne de cmd. Qui est l'astuce?
- Dans mon cas, j'ai oublié d'utiliser le nom de la branche : git push -u origine branch_name
Vous devez vous connecter pour publier un commentaire.
Si vous ne voulez pas fusionner la branche distante dans votre succursale locale (voir les différences avec git diff), et que vous voulez faire une force de pousser, utiliser le poussoir de commande avec -f
où
origin
est le nom de votre distance repo.$ git pull origin master -v
mais il donne une erreurfatal: refusing to merge unrelated histories
. Ensuite, j'ai essayé et cela a fonctionné, et mes fichiers locaux est apparu sur github à distance des pensions.Comme le message l'indique,
Utilisation
git pull
de tirer les dernières modifications sur le dépôt distant à votre dépôt local. Dans ce cas, tirant changements nécessiteront une fusion parce que vous avez fait des changements dans votre dépôt local.Je vais vous donner un exemple et une image pour expliquer. Supposons que votre pull dernière, de l'origine ou de la direction a été à Commettre B. Vous avez terminé et commis certains travaux (Commit C). Dans le même temps, quelqu'un d'autre a terminé son travail et l'a poussé vers l'origine ou de la direction (Commettre D). Il y aura besoin d'être une fusion entre ces deux branches.
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 l'origine ou de la direction.
Après l'achèvement de la fusion, vous allez maintenant être autorisés à l'avance rapide de l'origine ou de la direction de Commettre E en poussant vos modifications.
Git exige que vous manipulez des fusions-même, car une fusion peuvent conduire à des conflits.
git pull
également impriméAlready up-to-date
. Je n'était pas sur la branche que j'ai si je l'étais, mais un décollement de la TÊTE de la branche (éventuellement à partir d'un échec de la fusion?). C'était évident après l'exécution degit branch
. Après l'exécution degit checkout mybranch
tout a fonctionné comme prévu.Avez-vous mis à jour votre code avant de le pousser?
Utilisation
git pull origin master
avant d'appuyer sur quoi que ce soit.Je suppose que vous utilisez
origin
comme un nom pour votre télécommande.Vous avez besoin pour tirer avant de pousser, pour faire de votre dépôt local up-to-date, avant de vous enfoncer quelque chose (juste au cas où quelqu'un d'autre a déjà mis à jour le code sur
github.com
). Cela aide dans la résolution des conflits au niveau local.git pull origin master
git se plaint que'origin' does not appear to be a git repository
git remote --verbose
de voir tout le distant configuré dans votre dossier git. Les informations affichées sur l'écran sera également inclure "[email protected]" les chemins ou HTTPS chemins, à partir de laquelle vous devriez être en mesure d'identifier l'endroit où pousser. Espérons que cette aide !git remote --verbose
. Mais après j'ai ajouter leorigin
, tout va bien. Je vous remercie.git pull origin master
montrant Déjà à jour. mais ensuite, lorsque vous essayez de pousser sur origin_branch ce dire même avertissement mentionné dans la question. Toute suggestion !!git push -f <remote> <branch>
par exemple, git push origin <your_local_branch> cochez cette thread.Ce qui se passe normalement quand vous
git commit
et essayer degit push
modifications avant degit pulling
à la branchex
où quelqu'un d'autre a déjà fait des changements.Le flux normal serait comme ci-dessous,
ÉTAPE 1:
git stash
votre local les modifications non validées sur cette branche.ÉTAPE 2:
git pull origin branch_name -v
àpull and merge
localement commis des changements sur cette branche (donner à cette fusion de certains messages, et de résoudre les conflits éventuels.)ÉTAPE 3:
git stash pop
lastash
ed modifications (Ensuite, vous pouvez faire des commits sur sauté de fichiers si vous le souhaitez ou push déjà commis des changements (ETAPE 4) de la première et de faire de nouveau s'engagent à des fichiers plus tard.)ÉTAPE 4:
git push origin branch_name -v
les modifications fusionnées.Remplacer
branch_name
avecmaster
(pourmaster
branche).commit
? Si vous ne voulez pas enregistrer vos modifications aprèsstash pop
?Première et la solution la plus simple (Non Recommandé)
git push -f origin master
.Solution recommandée
Si cela ne fonctionne pas, alors suivez le long de
.git
répertoire du dossier.Puis exécutez ces commandes:
OU
Utiliser uniquement
git push -f origin master
si-u
ne fonctionnent pas pour vous.Cela va résoudre presque n'importe quel type d'erreurs, tout en poussant vos fichiers.
Parfois, nous avons oublié la traction et de fait beaucoup de travaux dans l'environnement local.
Si quelqu'un veut pousser sans tirer,
est de travail. Ce n'est pas recommandé lorsque vous travaillez avec d'autres personnes, mais quand votre travail est une chose simple ou un jouet projet, il sera une solution rapide.
reset --hard
à une ancienne commettent et qui ensuite fait un couple de plus. Alors je voulais justepush
mais la distance repo n'était pas prêt à me laisser faire. WarrenP pourrait effectivement aider à git apprenants en étant moins runique. Peut-être qu'il ne veut pas.Certains d'entre vous pouvez recevoir ce message d'erreur parce que Git ne sais pas dans quelle branche vous essayez de pousser.
Si votre message d'erreur comprend également
alors vous pouvez suivre les conseils pratiques de Jim Kubicek, Configurer Git pour Pousser Actuelles de la Direction générale, pour définir la branche par défaut actuel.
Cela a fonctionné pour moi -- la commande
git pull origin branch_name --rebase
va tirer les changements de distance branch_name, d'abord, puisrebase
actuelles de la direction générale sur le dessus de cela.Outre les réponses ci-dessus, la suite fonctionné pour moi : -
Scénario -
Solution -
--all
drapeau.J'ai eu le même problème , ce que j'ai fait j'ai d'abord poussé par la force en utilisant ce
Je l'ai fait après que j'ai commis la fichiers et a été une erreur que vous avez obtenu.Il a commis tous les fichiers et les ont poussés.
Alors la prochaine fois que j'essayais de le github .J'ai fait ce qu'il m'a demandé de le faire et ça a été très bien. Espérons que cela fonctionne pour vous aussi 🙂
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 dépôt sur GitHub, GitHub peut vous demander de créer un fichier readme. Si vous créez un fichier readme directement sur GitHub, vous devrez d'abord faire un "pull" demande avant de le "pousser" demande sera couronnée de succès.
Ces commandes vont "tirer" le dépôt distant, le fusionner avec vos fichiers, puis "pousser" tous les fichiers sur GitHub:
Je recevais le message d'erreur mentionné ci-dessus, quand j'ai essayé de pousser ma branche courante
foobar
:Il s'avère que j'avais deux branches locales de suivi de la même branche à distance:
Il a travaillé pour moi de pousser mon actuel de la branche à l'aide de:
... et à un nettoyage avec
git branch -d
git push -f origine branchname
Utiliser la commande ci-dessus uniquement si vous êtes sûr que vous n'avez pas besoin à distance de code de la branche sinon faire fusionner premier, puis poussez le code
Si vous ne voulez pas tirer dans votre projet en cours (et potentiellement face à des conflits de fusion vous n'avez pas de soins à résoudre) et vous ne voulez pas créer une autre branche (Ce sera fastidieux à gérer une autre branche), et vous ne voulez pas faire tout risqué et permanente git
force
commandes (qui, même après la lecture de ce qu'ils font, je suis souvent surpris par les implications de le faire).Solution: Vous pourriez tout simplement, faites glisser votre contenu du dossier dans un autre dossier, tirez le projet dans votre dossier vide, faites glisser le tiré contenu de la corbeille, puis faites glisser votre projet dans le dossier. Vous devriez être en mesure de pousser correctement et obtenir les résultats désirés. Littéralement me prend moins de 10 secondes pour le faire.
Pour les gens qui me diront que ce n'est pas bon sans citer toutes les conséquences, ou des gens qui me disent que pour utiliser une commande qui me fait de futurs ennuis, je dis: "Cette méthode littéralement me prend moins de 10 secondes." Si je rencontre une commande git qui prend moins de 10 secondes pour mettre en œuvre et a exactement le même effet, je vais l'adopter. Jusqu'alors, je suis en utilisant cette méthode.
Un inconvénient de cette méthode est que votre commit l'histoire apparaît linéaire lorsque vous regroupées dans une branche sans la fusion documentées. Cela pourrait ne pas être la meilleure méthode quand on travaille avec des groupes. Travail sur les branches, dans les cas!
Juste eu le même problème mais dans mon cas je l'avais trompé de direction sur la télécommande. Il me semble que c'est une autre source de ce problème... de vérifier si vous êtes poussant vers la bonne direction.
J'ai eu un problème similaire et il s'est avéré que mon flux de travail pour garder ma branche jusqu'à la date de la faute. Je faisais les suivantes:
Dans mon local "maître"
puis de retour dans ma branche locale
Cela a bien fonctionné pour un précédent git débit, mais pas avec github. Le
git rebase
était le problème, ici, à l'origine de problèmes avec la synchronisation (et je vais vous avouer que c'est quelque chose que j'ai dû accepter sans comprendre) et, malheureusement, m'a mis dans une position oùgit push -f
est devenu probablement l'option la plus facile. Pas bonne.Mon nouveau flux est de mettre à jour la branche directement à l'aide de
git merge
comme suit:Dans ma branche locale
Pas rapide vers l'avant, comme je vais avoir apporté des modifications de cours dans les locaux de la direction générale.
Comme vous pouvez le dire, je ne suis pas git expert, mais je suis sûre que ce flux de travail sera probablement éviter les problèmes spécifiques que j'ai eu.
Dans mon cas, j'ai eu "mybranch" vérifié, et l'avait fait
git pull
, donc je ne pouvais pas comprendre pourquoi le pousser ne fonctionnait pas. Finalement, j'ai réalisé que j'étais en poussant la mauvaise direction. J'ai été tapergit push origin master
au lieu degit push origin mybranch
.Donc, si vous avez déjà fait
git pull
et toujours ce message, assurez-vous que vous êtes en repoussant la bonne direction.J'ai vécu le même problème et il s'est avéré, j'étais sur une autre branche (locale) que je le pensais ET la bonne branche locale qui était derrière en s'engage à partir de la télécommande.
Ma solution: la caisse de la bonne branche, cherry-pick de la validation de l'autre branche locale, git pull et git push
Est votre nom de la branche la même que la télécommande nom de la branche?
Si non, vous devez commander une nouvelle branche avec le même nom que la branche à distance et essayer de pousser encore.
Assumer la télécommande direction vous voulez aller est [tests] et à votre succursale locale est nommé en tant que [test].
Si vous n'êtes pas dans test branche, d'abord passer.
Puis ouvrir une nouvelle branche et nom il tests.
Maintenant, il est temps de pousser:
$git branch -M <new_name>
pour renommer la section locale.- Je résoudre ce problème lors de mon dépôt GIT. Pas besoin de
rebase
ouforce
commettre dans ce cas. Utilisez les étapes ci-dessous pour résoudre ce -espère que ça va aider.
Une autre solution est de faire avancer la tête de la télécommande d'un autre commettre si vous le pouvez. Après que vous tirez de cette avancée, la tête dans les locaux de la sous-arborescence, alors vous serez en mesure de pousser à nouveau.
J'obtenais une erreur similaire, tout en poussant les dernières modifications apportées à un simple dépôt Git que j'utilise pour gitweb. Dans mon cas, je n'ai fait aucun changement dans le dépôt nu, donc j'ai simplement supprimé mon dépôt nu et cloné à nouveau:
Si vous êtes certain que personne n'a apporté des modifications à votre dépôt git et que vous travaillez sur la dernière version,
git pull
n'a pas de sens comme une solution dans votre cœur...Alors ce n'est probablement ce qui s'est passé, vous avez utilisé
git commit --amend
ATLASSIAN tutoriel: réécriture de l'histoire
Cependant, il n'est pas recommandé d'effectuer
git commit --amend
si vous avez déjà poussé la validation de GitHub, c'est parce que "une modification qui n'est pas juste de modifier la plus récente commit—il le remplace entièrement. Pour Git, il ressemblera à une nouvelle marque de commettre", ce qui signifie pour les autres développeurs sur votre GitHub, l'histoire ressemble à Un->B->C, mais pour vous, elle ressemble à Un->B->D, si GitHub laissez vouspush
, tout le monde devra réparer manuellement leur histoireC'est la raison pour laquelle vous obtenez le message d'erreur
! [rejected] master -> master (non-fast-forward)
, si vous savez que personne n'a tiré de votre dernier changement, vous pouvez le fairegit push --force
, ce sera modifier l'historique de git dans votre public des pensions de. Sinon...vous pouvez effectuergit pull
, mais je crois que ça va avoir le même résultat que vous n'avez pas à passer pargit commit --amend
,il va créer un nouveau commit (ie: historique de git après la commande git pull: A->B->C->D)pour plus de détails: Comment changer votre dernier commit
Une autre option: localement renommer votre branche de quelque chose de nouveau.
Vous serez ensuite en mesure de les pousser vers le dépôt distant, par exemple si c'est votre manière de garder une copie (de sauvegarde) et de faire en sorte que rien ne se perd.
Vous pouvez récupérer la branche distante d'avoir une copie locale et d'examiner les différences entre (i) quelle est la distance a (avec l'ancien nom de la branche) et (ii) ce que vous avez (le nouveau nom de la branche), et de décider quoi faire. Puisque vous n'étiez pas au courant de la télécommande différences dans la première place (d'où le problème), il suffit de fusion ou de forcer des changements de quelque part, c'est beaucoup trop brutal.
Regardez les différences, choisir la direction que vous souhaitez travailler, cherry pick modifications que vous souhaitez à partir de l'autre branche, ou d'annuler les changements que vous ne voulez pas sur la branche que vous avez etc.
Alors vous devriez être en mesure de décider si vous voulez forcer votre propre version sur la télécommande, ou en ajouter de nouvelles modifications, ou quoi que ce soit.
Le problème avec la commande push est que vous votre local et à distance référentiel ne correspond pas. SI vous initialisez readme par défaut lors de la création d'un nouveau dépôt à partir de git hub, puis, branche master est créé automatiquement. Toutefois, lorsque vous essayez de pousser qui n'a pas de n'importe quelle branche. vous ne pouvez pas pousser... Donc, la meilleure pratique consiste à créer repo sans défaut readme de l'initialisation.
Ce problème est généralement causé par la création d'un fichier readme.rapport de fichier, qui est compté comme un commit, n'est pas synchronisé sur le système local, et est en retard par rapport à la tête, d'où, il montre un git pull request. Vous pouvez essayer d'éviter le fichier readme et puis essayer de le commettre. Cela a fonctionné dans mon cas.
Une autre cause de ce problème (apparemment pas si courant)...
Mon serveur était derrière ~12 heures quand j'ai fait une poussée
J'ai configuré NTP sur le serveur de SYNCHRONISATION d'horloge.
J'ai exécuté une nouvelle git push qui a conduit l'erreur discuté dans ce post.
Si, par hasard,
git pull
imprimeAlready up-to-date
, alors vous pourriez vouloir vérifier le mondial gitpush.default
param (En~/.gitconfig
). Mis àsimple
si elle était dansmatching
. Ci-dessous la réponse explique pourquoi:Git - Quelle est la différence entre pousser.par défaut "matching" et "simple"
Aussi, il est intéressant de vérifier si votre section locale est en dehors de la date à l'aide de
git remote show origin
et faire un pull si nécessaireutilisation
git pull https://github.com/username/repository
C'est parce que le Github et des dépôts distants ne sont pas synchronisés. Si vous
pull
le repo et puisPush
tout sera en synchronisation et de l'erreur d'aller loin.`
git pull
imprime Déjàup-to-date
solution:
vous pourriez être créé un référentiel de projet/distant(serveur) et ajouté quelques fichier, Puis de nouveau créé un Dossier dans votre local et initialisé git
git init
- c'est le erreur, vous ne devez pas créergit init
en local, au lieu de cloner le projet de votre région à l'aide degit clone
puis tirez