git push dit tout à jour, même si j'ai des modifications locales
j'ai un serveur gitosis distant et un dépôt Git local, et chaque fois que je fais un grand changement dans mon code, je vais pousser les changements à ce serveur aussi.
mais aujourd'hui je trouve que même si j'ai quelques modifications locales et que je m'engage pour le dépôt local, lors de l'exécution de git push origin master il est dit "tout à jour", mais quand j'utilise git clone pour vérifier les fichiers sur le serveur distant, il ne contient pas le plus récent changement. Et je n'ai qu'une branche nommée maître et un serveur distant nommé d'origine.
PS: C'est ce que git affiche lors de l'exécution de ls-remote, Je ne suis pas sûr si cela aide
$ git ls-remote origin
df80d0c64b8e2c160d3d9b106b30aee9540b6ece HEAD
df80d0c64b8e2c160d3d9b106b30aee9540b6ece refs/heads/master
$ git ls-remote .
49c2cb46b9e798247898afdb079e76e40c9f77ea HEAD
df80d0c64b8e2c160d3d9b106b30aee9540b6ece refs/heads/master
df80d0c64b8e2c160d3d9b106b30aee9540b6ece refs/remotes/origin/master
3a04c3ea9b81252b0626b760f0a7766b81652c0c refs/tags/stage3
18 réponses
vous ne travailleriez pas avec une tête détachée par hasard ?
comme dans:
indiquant que votre dernier commit n'est pas un chef de branche.
$ git log -1
# note the SHA-1 of latest commit
$ git checkout master
# reset your branch head to your previously detached commit
$ git reset --hard <commit-id>
Comme mentionné dans le git checkout
l'homme page (l'emphase est mienne):
il est parfois utile pour pouvoir vérifier un commit qui n'est pas à la pointe d'une de vos branches .
L'exemple le plus évident est de vérifier le commit à un point de sortie officiel étiqueté, comme ceci:
$ git checkout v2.6.18
les versions précédentes de git ne le permettaient pas et vous ont demandé de créer une branche temporaire en utilisant l'option
-b
, mais à partir de la version 1.5.0, le la commande ci-dessus détache votreHEAD
de la branche courante et pointe directement sur le commit nommé par la balise (v2.6.18
dans l'exemple ci-dessus).Vous pouvez utiliser toutes les commandes git dans cet état.
Vous pouvez utilisergit reset --hard $othercommit
pour vous déplacer davantage, par exemple.
Vous pouvez modifier et de créer un nouveau commit sur le dessus d'un décollement de la TÊTE .
Vous pouvez même créer une fusion en utilisantgit merge $othercommit
.l'état dans lequel vous vous trouvez lorsque votre tête est détachée n'est enregistré par aucune branche (ce qui est naturel --- vous n'êtes sur aucune branche).
Cela signifie que vous pouvez vous débarrasser de vos commits et fusions temporaires en retournant à une branche existante (par exemplegit checkout master
), et plus tardgit prune
ougit gc
les ramasserait.
Si vous avez fait cela par erreur, vous pouvez demander au reclog pour la tête où vous étiez, par exemple
$ git log -g -2 HEAD
Err.. Si vous êtes un git noob êtes-vous sûr que vous avez git commit
avant git push
? J'ai fait cette erreur la première fois!
peut-être que vous poussez une nouvelle branche locale?
une nouvelle branche locale doit être poussée explicitement:
git push origin your-new-branch-name
juste une de ces choses à propos de git... Vous clonez une rétrocession, faites une branche, faites des changements, poussez... "Tout est à jour". Je comprends pourquoi cela arrive, mais ce workflow est extrêmement hostile aux nouveaux venus.
une autre situation qu'il est important de connaître: le type d'état par défaut pour git est que vous travaillez dans la branche" master". Et pour beaucoup de situations, vous allez juste traîner dans ce que votre branche principale de travail (bien que certaines personnes deviennent fantaisie et faire d'autres choses).
de toute façon, c'est juste une branche. Donc une situation dans laquelle je pourrais me trouver est:
ma branche active n'est pas la branche principale. ... Mais je fais habituellement le commandement: git push
(et j'avais déjà fait git push origin master
, donc c'est un raccourci pour cela).
donc j'ai l'habitude de pousser la branche principale au repo partagé ... ce qui est probablement un bon nettoyage de chose, dans mon cas ...
Mais j'ai oublié que les modifications que j'ai travaillé ne sont pas encore DANS la branche master !!!
"151930920 donc, chaque fois que j'essaiegit push
, et je vois "Tout à jour", je veux crier, mais bien sûr, ce n'est pas la faute de git! C'est le mien.
donc à la place, je fusionne ma branche en maître, et puis je pousse, et tout est de nouveau heureux.
mon problème était que ma succursale locale avait un nom différent de celui de la succursale éloignée. J'ai pu pousser en faisant ce qui suit:
$ git push origin local-branch-name:remote-branch-name
(crédit à https://penandpants.com/2013/02/07/git-pushing-to-a-remote-branch-with-a-different-name / )
voir la réponse de VonC ci - dessus- j'avais besoin d'une étape supplémentaire:
$ git log -1
- note the SHA-1 of latest commit
$ git checkout master
- reset your branch head to your previously detached commit
$ git reset --hard <commit-id>
j'ai fait cela, mais quand j'ai ensuite essayé de git push remoterepo master
, il a dit
"erreur: je n'ai pas réussi à pousser quelques références. Pour vous empêcher de perdre l'historique, les mises à jour non-fast-forward ont été rejetées, fusionnez les modifications à distance (par exemple 'git pull') avant de pousser à nouveau."
alors j'ai fait' git pull remoterepo master', et il a trouvé un conflit. J'ai fait git reset --hard <commit-id>
encore une fois, copié le fichiers en conflit vers un dossier de sauvegarde, a fait git pull remoterepo master
à nouveau, copié les fichiers en conflit dans mon projet, a fait git commit
, puis git push remoterepo master
, et cette fois, il a fonctionné.
Git a cessé de dire 'tout est à jour' - et il a cessé de se plaindre de 'Fast Forward'.
$ git push origin local_branch:remote_branch
explication
j'ai eu la même erreur et j'ai passé des heures à essayer de comprendre. Enfin je l'ai trouvé.
Ce que je ne savais pas, c'est que pousser comme ça git push origin branch-x
va essayer de chercher la branche-x localement puis la pousser vers la branche-x distante.
dans mon cas, j'avais deux URL distantes. J'ai fait un check-out de branch-x à branch-y en essayant de pousser de y localement à x remote j'ai eu le message que tout est à jour, ce qui est normal, car j'essayais de x de la deuxième télécommande.
longue histoire pour ne pas tomber dans ce genre de piège, vous devez préciser la source réf et la cible réf:
$ git push origin local_branch:remote_branch
j'ai fait face à une situation similaire; quand j'ai fait les changements et essayé de
git push origin master
, il disait que tout était à jour.
j'ai dû git add
le fichier modifié, et puis git push origin master
. Il a commencé à travailler à partir de là.
vu votre statut de Gitan, Vous avez probablement une situation différente de la mienne.
mais voilà ce qui m'est arrivé.. J'ai rencontré l'erreur suivante:
fatal: The remote end hung up unexpectedly
Everything up-to-date
le message le plus instructif ici est que la télécommande a raccroché. Il s'avère que c'est dû au dépassement de la taille du tampon http post. La solution est de l'augmenter avec
git config http.postBuffer 524288000
j'ai eu ce problème aujourd'hui, et il n'avait rien à voir avec aucune des autres réponses. Voici ce que j'ai fait et comment je l'ai réparé:
un de mes dépôts a récemment déménagé, mais j'en avais une copie locale. J'ai bifurqué de ma branche "maître" locale et j'ai fait quelques changements--et puis je me suis souvenu que le dépôt avait déménagé. J'ai utilisé git remote set-url origin https://<my_new_repository_url>
pour définir la nouvelle URL mais quand je l'ai poussé il disait juste" tout à jour " au lieu de pousser ma nouvelle branche à maîtriser.
j'ai fini par le résoudre en rebaptisant origin/master
et en poussant avec des noms de branches explicites, comme ceci:
$ git rebase <my_branch> origin/master
$ git push origin <my_branch>
j'espère que cela aidera tous ceux qui ont eu mon même problème!
Super rare-mais quand même: sur Windows, il se peut que packed-refs ait une branche avec une majuscule (I. e dev / mybranch), tandis que le dossier refs a un autre cas (I. e Dev / mybranch) when core.ignorecase est réglé sur true.
la solution consiste à supprimer manuellement la ligne correspondante de emballé-réfs . N'ai pas trouver une solution plus propre.
une Autre possibilité est que vous avez nommé un répertoire dans votre .dossier gitignore qui a été exclu. Pour que les nouveaux commits ne soient pas poussés. Il m'est arrivé que j'ai nommé un répertoire d'ignorer "recherche", mais c'était aussi un répertoire dans mon arborescence source.
mon erreur était différente de tout ce qui a été mentionné jusqu'à présent. Si vous ne savez pas pourquoi vous avez une tête détachée, alors vous ne le savez probablement pas. Je travaillais sur le pilote automatique avec git commit
et git push
, et je n'avais pas lu la sortie de git commit
. Il s'avère que c'était un message d'erreur parce que j'ai oublié-am.
[colin] ~/github/rentap.js [master] M % git commit 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers'
error: pathspec 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers' did not match any file(s) known to git.
[colin] ~/github/rentap.js [master] M % git push
Enter passphrase for key '/home/colin/.ssh/id_ecdsa':
Everything up-to-date
fixé en mettant -am
où je fais habituellement:
[colin] ~/github/rentap.js [master] M % git commit -am 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers'
vérifiez que vous n'avez pas gaffé votre URL distante.
je voulais juste mentionner que j'ai rencontré ceci après avoir activé Git en tant que CVS dans une configuration locale de Jenkins. Il semble que Jenkins ait vérifié le plus récent commit de la branche que je lui ai donné et aussi réinitialisé ma télécommande pour correspondre aux chemins que je lui ai donnés à la repo. J'ai dû vérifier à nouveau ma branche de fonctionnalité et corriger mon url distante d'origine avec 'git remote set-url'. Ne pointez pas un outil de construction sur votre je travaille dans l'annuaire ou tu vas passer un mauvais moment. Ma télécommande était réglée sur un chemin de fichier vers mon répertoire de travail, donc elle signalait naturellement tout ce qui était à jour lorsque j'ai essayé de pousser les changements avec la même source et la même destination.
j'ai moi-même rencontré cela en fusionnant une branche sur Github et en continuant à y développer localement. Mon correctif était un peu différent des autres qui ont été suggérés.
J'ai d'abord ramifié une nouvelle branche locale de mon ancienne branche locale (que je ne pouvais pas pousser). Puis j'ai poussé la nouvelle branche locale vers le serveur d'origine (Github). C'est-à-dire:
$ git checkout -b newlocalbranch oldlocalbranch
$ git push origin newlocalbranch
cela a fait apparaître les changements sur Github, bien que dans newlocalbranch plutôt que oldlocalbranch.
dans mon cas, j'ai eu 2 repos à distance.
git remote -v
originhttps https://asim_kt@...
originhttps https://asim_kt@...
origin ssh:git@bitbucket.org:...
origin ssh:git@bitbucket.org:...
les deux pensions étaient identiques. Un seul était https
l'autre était ssh
. Donc enlever le non-désiré, (dans mon cas ssh
. depuis que j'ai utilisé https
parce que ssh
ne marchait pas!) fixe le problème pour moi.
j'ai eu le même problème. Dans mon cas, il a été causé par la présence de noms pour la même distance. Il a créé le standard 'origin', mais j'utilise' github ' comme télécommande depuis longtemps, donc c'était là aussi. Dès que j'ai enlevé le "origine" à distance, l'erreur a disparu.
il y a un moyen rapide que j'ai trouvé. Allez à la votre .dossier git, ouvrez le fichier HEAD
et changez la branche sur laquelle vous étiez. Par exemple: réf: refs/heads/master