Git push ne fera rien (tout est à jour)

100

J'essaye de mettre à jour un référentiel Git sur GitHub. J'ai fait un tas de changements, je les ai ajoutés, je me suis engagé puis j'ai essayé de faire un git push. La réponse me dit que tout est à jour, mais ce n'est clairement pas le cas.

git remote show origin

répond avec le référentiel auquel je m'attendais.

Pourquoi Git me dit-il que le référentiel est à jour alors qu'il y a des commits locaux qui ne sont pas visibles sur le référentiel?

  [searchgraph]  git status
# On branch develop
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       Capfile
#       config/deploy.rb
nothing added to commit but untracked files present (use "git add" to track)

  [searchgraph]  git add .

  [searchgraph]  git status
# On branch develop
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   Capfile
#       new file:   config/deploy.rb
#

  [searchgraph]  git commit -m "Added Capistrano deployment"
[develop 12e8af7] Added Capistrano deployment
 2 files changed, 26 insertions(+), 0 deletions(-)
 create mode 100644 Capfile
 create mode 100644 config/deploy.rb

  [searchgraph]  git push
Everything up-to-date

  [searchgraph]  git status
# On branch develop
nothing to commit (working directory clean)
Jamie Wong
la source

Réponses:

142

git pushne pousse pas toutes vos succursales locales: comment pourrait-il savoir vers quelles succursales distantes les pousser? Il ne pousse que les branches locales qui ont été configurées pour pousser vers une branche distante particulière.

Sur ma version de Git (1.6.5.3), lorsque je l'exécute, git remote show originil affiche en fait les branches configurées pour le push:

Local refs configured for 'git push':
  master pushes to master (up to date)
  quux   pushes to quux   (fast forwardable)

Q. Mais je pourrais pousser mastersans me soucier de tout ça!

Lorsque vous git clone, par défaut, il configure votre masterbranche locale pour pousser vers la masterbranche de la télécommande (appelée localement origin/master), donc si vous ne vous engagez que sur master, alors un simple git pushrepoussera toujours vos modifications.

Cependant, à partir de l'extrait de sortie que vous avez publié, vous êtes sur une branche appelée develop, qui, je suppose, n'a pas été configurée pour pousser vers quoi que ce soit. Donc, git pushsans arguments, les commits ne seront pas poussés sur cette branche.

Quand il dit «Tout est à jour», cela signifie «toutes les branches que vous m'avez dit comment pousser sont à jour».

Q. Alors, comment puis-je pousser mes commits?

Si ce que vous voulez faire est de mettre vos modifications de developdans origin/master, vous devriez probablement les fusionner dans votre local, masterpuis pousser cela:

git checkout master
git merge develop
git push             # will push 'master'

Si vous voulez créer une developbranche sur la télécommande, séparée de master, alors fournissez des arguments à git push:

git push origin develop

Cela va: créer une nouvelle branche sur la télécommande appelée develop; et mettez cette succursale à jour avec votre developsuccursale locale ; et ensemble developpour pousser à de origin/developtelle sorte que , à l' avenir, git pushsans arguments vont pousser developautomatiquement.

Si vous voulez pousser votre local developvers une branche distante appelée autre chose quedevelop , vous pouvez dire:

git push origin develop:something-else

Cependant, ce formulaire ne sera pas mis en place developpour toujours pousser à l' origin/something-elseavenir; c'est une opération ponctuelle.

Sam Stokes
la source
Merci beaucoup, votre origine git push a été développée: autre chose a donné une réponse à une question que je n'ai pas pu obtenir pendant un certain temps.
Antroid
1
Dans mon cas, je git push origin xne mettais toujours pas en place la branche x pour être poussé à l'avenir. Cela était dû à un pushspec spécifique dans la .gitconfig [remote "origin"]section qui causait le comportement de git.
Raman
27

Cela m'est arrivé lorsque mon application SourceTree s'est plantée lors de la mise en place. Et sur la ligne de commande, il semblait que le précédent git addavait été corrompu. Si tel est le cas, essayez:

git init
git add -A
git commit -m 'Fix bad repo'
git push

Sur la dernière commande, vous devrez peut-être définir la branche.

git push --all origin master

Gardez à l'esprit que cela suffit si vous n'avez pas effectué de branchement ou quoi que ce soit de ce genre. Dans ce cas, assurez-vous de pousser vers la bonne branche comme git push origin develop.

Vik
la source
15

Essayer:

git push --all origin
asandroq
la source
cela pousse les commits à séparer les branches sur le repo, pas d'une branche en master.
Sreedevi J
13

Veuillez essayer d'aller au dernier commit, puis faites git push origin HEAD:master.

uruapanmexicansong
la source
1
Cela a vraiment fonctionné. Souhaitez-vous expliquer pourquoi cela a fonctionné?
René Nyffenegger
Textuellement à partir de documents:Push the current branch to the remote ref matching master in the origin repository. This form is convenient to push the current branch without thinking about its local name.
uruapanmexicansong
A travaillé pour moi aussi
Jerad Rutnam
J'ai comparé la configuration de mon dépôt et toutes les branches se ressemblaient. Pourtant, dans une branche que je ne pouvais pas utiliser simplement git push: / Cela a fonctionné pour moi aussi: git push origin HEAD:my_branch_name.
iaforek
6

Pour mon cas, aucune des autres solutions n'a fonctionné. J'ai dû faire une sauvegarde des nouveaux fichiers modifiés (indiqués avec git status), et exécuter un fichier git reset --hard. Cela m'a permis de me réaligner avec le serveur distant. Ajout de nouveaux fichiers modifiés et exécution

git add .
git commit -am "my comment"
git push

A fait le tour. J'espère que cela aide quelqu'un, comme solution de «dernière chance».

Andrea
la source
4

À l'heure actuelle, il apparaît que vous êtes sur la branche de développement. Avez-vous une branche de développement sur votre origine? Sinon, essayez git push origin develop. git pushfonctionnera une fois qu'il connaîtra une branche de développement sur votre origine.

Pour en savoir plus, je jetterais un œil aux pages de manuel de git-push , en particulier à la section des exemples.

theIV
la source
3

Pour être précis, si vous souhaitez fusionner quelque chose à maîtriser, vous pouvez suivre les étapes ci-dessous.

git add --all // If you want to stage all changes other options also available
git commit -m "Your commit message"
git push // By default when it clone is sets your origin to master or you would have set sometime with git push -u origin master.

C'est une pratique courante dans le modèle de demande d'extraction créer dans une nouvelle branche locale, puis pousser cette branche vers distante. Pour cela, vous devez mentionner où vous souhaitez appliquer vos modifications à distance. Vous pouvez le faire en mentionnant la télécommande au moment du push.

git push origin develop // It will create a remote branch with name "develop".

Si vous souhaitez créer une branche autre que le nom de votre branche locale, vous pouvez le faire avec la commande suivante.

git push origin develop:some-other-name
Manu
la source
2

Merci à Sam Stokes. Selon sa réponse, vous pouvez résoudre le problème de manière différente (j'ai utilisé de cette manière). Après avoir mis à jour votre répertoire de développement, vous devez le réinitialiser

git init

Ensuite, vous pouvez valider et pousser les mises à jour vers master

Nadir Hajiyev
la source
1
Merci! Dans mon cas, tapez: git initet ouvrez un nouvel onglet de commande, tapez:git push origin branch_name
s7ven
2

Cela m'est arrivé lorsque je suis ^Cau milieu d'un git pushsur GitHub. Cependant, GitHub n'a pas montré que les modifications avaient été apportées.

Pour résoudre ce problème, j'ai apporté une modification à mon arbre de travail, engagé, puis poussé à nouveau. Cela a parfaitement fonctionné.

helsont
la source
2

Cela m'est arrivé. Je viens de réengager les changements, puis cela a poussé.

user742102
la source
2

J'ai essayé de nombreuses méthodes, y compris définies ici. Ce que j'ai c'est,

  • Assurez-vous que le nom du référentiel est valide. Le meilleur moyen est de copier le lien depuis le site du référentiel et de le coller dans git bash.

  • Assurez-vous que vous avez validé les fichiers sélectionnés.

    git commit -m "Your commit here"
    
  • Si les deux étapes ne fonctionnent pas, essayez

    git push -u -f origin master

Développeur ici
la source
1

Au lieu de cela, vous pouvez essayer ce qui suit. Vous n'êtes pas obligé d'y aller master; vous pouvez forcer directement les modifications depuis votre branche elle-même.

Comme expliqué ci-dessus, lorsque vous effectuez un rebase, vous modifiez l'historique de votre branche. En conséquence, si vous essayez de faire une opération normale git pushaprès un rebase, Git la rejettera car il n'y a pas de chemin direct entre le commit sur le serveur et le commit sur votre branche. Au lieu de cela, vous devrez utiliser l' indicateur -fou --forcepour dire à Git que oui, vous savez vraiment ce que vous faites. Lorsque vous effectuez des poussées forcées, il est fortement recommandé de définir votre push.defaultparamètre de configuration sur simple, qui est la valeur par défaut dans Git 2.0. Pour vous assurer que votre configuration est correcte, exécutez:

$ git config --global push.default simple

Une fois que c'est correct, vous pouvez simplement exécuter:

$ git push -f

Et vérifiez votre pull request. Il devrait être mis à jour!

Allez au bas de Comment rebaser une demande d' extraction pour plus de détails.

JumpMan
la source
0

Assurez-vous également de pousser vers la bonne branche.

Brian
la source
0

Cela m'est arrivé une fois que j'ai essayé de pousser depuis une nouvelle branche et que j'ai utilisé à la git push origin masterplace. Vous devez soit:

  • Utilisation: git push origin your_new_branchsi vous voulez que cette branche apparaisse également dans le référentiel distant.
  • Sinon, vérifiez dans votre branche principale, fusionnez les choses, puis passez de master à git repo avec git merge origin master.

Récapitulatif: le point ici est que vous devriez vérifier où vous offrez sur le deuxième paramètre pour git merge. Donc, si vous êtes dans le master, utilisez master comme deuxième paramètre si vous êtes dans new_branch, utilisez-le comme deuxième paramètre si vous souhaitez conserver cette branche dans le dépôt distant, sinon optez pour la deuxième option ci-dessus.

DINA TAKLIT
la source