Impossible de pousser vers GitHub - continue de dire qu'il faut fusionner

743

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?

user1353717
la source
6
Notez que cela peut également se produire pour les branches précédemment visitées localement, qui ont eu des validations dans le référentiel en amont. Existe-t-il un moyen simple de faire avancer rapidement une ancienne branche ou simplement de laisser git l'oublier dans le référentiel local?
Thorbjørn Ravn Andersen
50
@ ThorbjørnRavnAndersen - J'ai réussi à corriger ce scénario en utilisant 'git push -f' qui semblait faire oublier à git ses problèmes imaginaires :)
Echelon
6
Vu une plainte de git newcomer. La raison en est que lorsqu'ils créent un nouveau projet sur GitHub, ils laissent la case à cocher "Initialiser avec readme" ou choisissent les options .gitignore / GPL, de sorte que le nouveau projet a déjà un commit qu'ils n'ont pas localement, d'où la confusion causée par l'erreur ci-dessus.
Ruslan Kabalin du
4
@Echelon, l'option -f pour forcer la poussée est dangereuse. Je viens de l'utiliser dans un projet d'équipe et 6 commits ont été "rayés", simplement supprimés du serveur et aucun moyen de les récupérer!
Deleplace
42
Son tendance à louer git. Mais presque tous les développeurs à qui j'ai parlé, conviennent en privé qu'ils détestent personnellement git. Maintenant qu'ils utilisent git, ils passent beaucoup plus de temps dans le contrôle de code source que ce qu'ils dépensaient lorsqu'ils utilisaient perforce ou TFS.
developer747

Réponses:

762

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 les différences avec git diff ) et souhaitez effectuer une poussée forcée, utilisez la commande push avec -f

git push -f origin <branch>

originest le nom de votre dépôt à distance .

Habituellement, 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. Ce drapeau désactive la vérification. Cela peut entraîner la perte de validations du référentiel distant; utilisez-le avec précaution.

Nick Rolando
la source
1
Cela a fonctionné pour moi pour un dépôt que j'ai sur Github mais, j'avais un sous-module de Heroku dans mon application. et j'ai dû sortir les fichiers du sous-module, puis pousser l'application mise à jour sur Heroku.
JGallardo
24
Assurez-vous de lire la dernière ligne du commentaire sur ce post! "Cela peut entraîner la perte de validations du référentiel distant; utilisez-le avec précaution." Faire des poussées de force dans un environnement d'équipe est une chose dangereuse et devrait généralement être évitée.
Adam Kalnas
Cela peut également AJOUTER tout l'historique du référentiel d'origine à la télécommande à l'aide de cherry-pick pour déplacer «juste» un commit. Restauration à partir de la sauvegarde requise ...
rickfoosusa
Il convient également de mentionner que si vous utilisez Github, cela peut remplacer une demande de tirage ouverte que vous avez précédemment créée avec vos validations les plus récentes. De Github Docs : "La poussée forcée peut corrompre votre demande de pull".
Armfoot
Cela a fonctionné pour moi. J'ai essayé $ git pull origin master -vmais ça donne une erreur fatal: refusing to merge unrelated histories. Ensuite, j'ai essayé cela et cela a fonctionné et mes fichiers locaux sont apparus sur github remote repo.
Vir
238

Comme le message vous le dit,

Fusionner les modifications à distance (par exemple «git pull»)

Utilisez git pullpour 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.

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

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.

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

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.

Jake Greene
la source
7
Et si vous ne voulez pas fusionner? Et laissez simplement D comme branche latérale (au moins pour l'instant). Plus tard, je pourrais commettre plus après C; quelqu'un d'autre pourrait s'engager davantage après D. Quelle est la hâte de fusionner? Comment puis-je pousser une branche latérale sans fusionner? ~~~
Steve Pitchers
3
local / branch et origin / branch sont censés représenter la même branche mais sur des machines différentes (local vs origine); pousser local / branch c'est mettre à jour origine / branch. Si vous voulez que l'état de votre branche soit visible pour les autres (c'est-à-dire sur l'origine) mais que vous ne voulez pas fusionner avec origine / branche, alors vous devez créer une nouvelle branche hors de local / branche (git branche [nom]) et pousser cette branche à l'origine (git push -u origin [nom])
Jake Greene
1
Grande explication. Cette vidéo montre une brève démonstration du problème et comment le résoudre comme le décrit @JakeGreene, ainsi que deux façons de l'éviter en premier lieu lors de la configuration d'un nouveau référentiel.
Kevin Markham
4
quelques années plus tard, il semble que cette réponse soit très très similaire à cette autre
superjos
1
Pour moi git pullaussi 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 couru git branch. Après avoir exécuté git checkout mybranchtout a fonctionné comme prévu.
strider
200

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

À utiliser git pull origin masteravant de pousser quoi que ce soit.

Je suppose que vous utilisez origincomme 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.

AYK
la source
1
Comment puis-je connaître le nom du référentiel? Quand je tape git pull origin mastergit se plaint que'origin' does not appear to be a git repository
ziyuang
3
'origin' est une télécommande. Vous pouvez utiliser git remote --verbosepour 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 !
AYK
16
git pull origin mastermontrant déjà à jour. mais lorsque vous essayez de pousser sur origin_branch, dites le même avertissement mentionné en question. Toute suggestion !!
CoDe
2
@Shubh avez-vous déjà résolu le problème? Je reçois la même chose!
OriginalAlchemist
3
@OriginalAlchemist yes..depuis que je ne suis qu'un développeur qui travaille sur une branche locale distante ... j'ai donc forcé la poussée de la branche locale ..et qui remplace toutes les modifications de la branche ouverte sur le serveur avec mes modifications du système local. git push -f <remote> <branch>par exemple git push origin <your_local_branch> vérifier ce fil .
CoDe
122

Cela se produit normalement lorsque vous git commitessayez de faire des git pushchangements avant git pullingsur cette branche xoù quelqu'un d'autre a déjà fait des changements.

Le flux normal serait comme ci-dessous,

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

ÉTAPE 2 : git pull origin branch_name -vpour effectuer pull and mergeles modifications validées localement sur cette branche ( transmettez un message à cette fusion et corrigez les conflits, le cas échéant ) .

ÉTAPE 3 : git stash poples stashmodifications 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 -vles modifications fusionnées.

Remplacez branch_namepar master(pour la masterbranche).

Prayagupd
la source
3
où est le commit? Ne devriez-vous pas valider vos modifications après stash pop?
mehmet
Je devrais. Je pousse généralement le code fusionné d'abord, puis je valide mes modifications locales non validées. Vous pouvez également vous engager et pousser à la fois. Juste préférence.
priagupd
51

Première et simple solution (non recommandée)

  • Essayez cette commande git push -f origin master.
  • Cette commande écrasera de force le référentiel distant (GitHub)

Solution recommandée

  • Exécutez ces commandes:
git pull --allow-unrelated-histories  //this might give you error but nothing to worry, next cmd will fix it
git add *
git commit -m "commit message"
git push

Si cela ne fonctionne pas, suivez-le 🔰

  • Supprimez le .gitrépertoire du dossier.
  • Exécutez ensuite ces commandes:

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

OU

git push -f origin master 

N'utilisez que git push -f origin mastersi vous -une travaillez pas pour vous.

Cela résoudra presque tous les types d'erreurs se produisant lors de la transmission de vos fichiers.

Smit Patel
la source
4
Supprimer votre dépôt git et perdre l'intégralité de votre historique de commit est une solution "recommandée"? Semble hâtif.
Nils Guillermin
@Nils Guillermin Cela dépend de votre situation. Si je travaille sur un grand projet où je dois résoudre tous les conflits de fusion, j'utiliserais vscode pour revoir et fusionner facilement toutes les modifications. Merci pour votre avis.
Smit Patel
47

Parfois, nous avons oublié le tirage et avons fait beaucoup de 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 lorsque votre travail est une chose simple ou un projet de jouet personnel, ce sera une solution rapide.

Teo
la source
$ git push --force origin master
shaurya uppal
2
Cela a fonctionné pour moi: projet personnel avec 0 autres collaborateurs. J'avais essayé plusieurs autres "solutions" suggérées ici sur SO, aucune d'entre elles ne corrigeant ce qui était un problème très simple: j'avais fait un local reset --hardà un commit plus ancien puis en ai fait quelques autres. Ensuite, je voulais juste, pushmais 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.
mike rodent
2
Soit ne l'utilisez pas, soit apprenez à l'utiliser correctement. Si vous forcez le push vers un référentiel central important partagé par une équipe, vous devez perdre tout accès push à tous les référentiels importants. Ce que vous faites sur votre propre référentiel personnel, pour éviter d'apprendre d'autres solutions, affectera éventuellement votre capacité à travailler sur des référentiels partagés. Si vous savez ce qui s'est passé avant la poussée forcée, parfois une poussée forcée est acceptable. Sinon, ce n'est jamais ok.
Warren P
35

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

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.

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.

git config --global push.default current
xiatica
la source
32
git pull origin branch_name --rebase

Cela a fonctionné pour moi - la commande git pull origin branch_name --rebaseva extraire les modifications de nom_branche distant au début, puis rebasela branche actuelle en haut.

Pyuri Sahu
la source
20

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

Scénario -

  1. J'ai poussé my_branch vers l'origine avec succès.
  2. J'ai apporté quelques modifications supplémentaires.
  3. Lorsque j'ai essayé de pousser à nouveau (après avoir ajouté, validé 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**

Preuve

Bhavuk Mathur
la source
1
Tu m'as aidé. J'ai eu du mal à remarquer que je devais passer à une autre succursale et la retirer de la télécommande, même si je tirais sur une autre succursale à l'aide du --alldrapeau.
MZanetti
18

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

git push --force

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 :)

Kailash Bhalaki
la source
Cela fonctionnera mais ce n'est peut-être pas ce que vous voulez! Cela signifie que vous ignorez simplement les changements qui seront désormais perdus à jamais.
roule le
3
git push --set-upstream origin master --force
Legends
1
Excellent moyen de détruire un référentiel. Si vous forcez, vous détruirez l'histoire. De nombreuses bases de code git configurées par des professionnels ne vous permettront pas de le faire.
Oliver Dixon
Il s'agit d'une réponse en double, et l'original n'était de toute façon pas un excellent conseil.
moopet
C'est en fait ce que je veux faire, mais j'ai juste essayé avec Gitlab, et Gitlab ne permet pas cela sur les "branches protégées" par conception
jeffery_the_wind
13

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:

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

git push https://github.com/thomas07vt/MyFirstRepo.git master
Thomas07vt
la source
Je sais que c'est un an plus tard, mais parmi toutes ces réponses, la vôtre était la seule à expliquer pourquoi j'avais déjà des problèmes avec github le premier jour. Quelle est la différence entre tirer et récupérer?
Xander Luciano
1
La récupération vous permet de fouiller dans les modifications sans les fusionner dans votre branche locale. Pull est un raccourci pour récupérer puis fusionner. Je suis sûr que vous l'avez compris au cours des 13 derniers mois. Je ne fais que passer parce que j'ai créé mon propre gâchis. ;-)
wolfhoundjesse
6

J'obtenais 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 succursales 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

Marco
la source
6

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

VIKAS KOHLI
la source
5
Ceci est un double d'une mauvaise réponse.
moopet
5

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 forcecommandes 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!

ScottyBlades
la source
4

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.

longda
la source
1
Et j'avais une chose similaire, où j'avais rappelé une commande précédente, qui avait été pour un référentiel complètement différent!
Clare Macrae
4

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

Ramon Fincken
la source
4

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

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 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 -fest probablement devenu l'option la plus facile. Pas bon.

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

Dans ma succursale locale

git fetch upstream
git merge upstream/master

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.

Composante 10
la source
3

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 tapais git push origin masterau lieu de git push origin mybranch.

Donc, si vous avez déjà terminé git pullet recevez toujours ce message, assurez-vous de pousser la bonne branche.

wisbucky
la source
3

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.

git checkout test

Ouvrez ensuite une nouvelle branche et nommez-la testing .

git checkout -b testing

Maintenant, il est temps de pousser:

git push [remote repo] testing
fox323
la source
2
Utilisez simplement $git branch -M <new_name>pour renommer la branche locale.
coms
3

J'ai résolu ce problème dans mon référentiel GIT. Pas besoin de rebaseou forcecommettras 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 cela vous aidera.

Sai prateek
la source
2

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.

9swampy
la source
2

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:

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

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 pulln'a pas de sens comme solution dans votre cœur ...

C'est probablement ce qui s'est passé, vous avez utilisé git commit --amend

Il vous permet de combiner les modifications par étapes avec la validation précédente au lieu de la valider comme un instantané entièrement nouveau. Il peut également être utilisé pour simplement modifier le message de validation précédent sans modifier son instantané.

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 permet push, tout le monde devra corriger manuellement son historique

C'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 faire git push --force, cela modifiera l'historique git dans votre référentiel public . Sinon ... vous pouvez effectuer git 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

watashiSHUN
la source
2

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.

Ivan
la source
1

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.

Suman Astani
la source
1

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.

Aman Mishra
la source
0

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.

X-MEN
la source
0

Si par hasard git pullimprime Already up-to-datealors vous voudrez peut-être vérifier le push.defaultparamètre git global (In ~/.gitconfig). Réglez-le sur simples'il était dedans matching. 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 originet de faire un pull si nécessaire

Vikash Raja Samuel Selvin
la source
0

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 vous pullle repo et puis Pushtout sera synchronisé et l'erreur disparaîtra.

"

Mahi
la source
0

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éer git initen local, au lieu de cela cloner le projet sur votre local en utilisantgit clone

puis tirez

noob_no1
la source