J'essaie de mettre à jour un référentiel Git sur GitHub. J'ai fait un tas de modifications, les ai ajoutées, validées puis tenté 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 je m'attendais.
Pourquoi Git me dit-il que le référentiel est à jour alors que des validations locales 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)
git Push
ne pousse pas toutes vos branches locales: comment pourrait-il savoir à quelles branches distantes les pousser? Il ne pousse que les branches locales configurées pour pousser vers une branche distante donnée.
Sur ma version de Git (1.6.5.3), lorsque je lance git remote show Origin
, les branches configurées pour le Push sont affichées:
Local refs configured for 'git Push':
master pushes to master (up to date)
quux pushes to quux (fast forwardable)
Q. Mais je pourrais pousser à master
sans me soucier de tout ça!
Lorsque vous git clone
, il configure par défaut votre branche master
locale sur Push vers la branche master
de la télécommande (appelée localement Origin/master
). Ainsi, si vous ne validez que sur master
, un simple git Push
restitue toujours vos modifications.
Cependant, à partir de l'extrait de sortie que vous avez posté, vous êtes sur une branche appelée develop
, qui, je suppose, n'a pas été configurée pour pousser à rien. Donc, git Push
sans arguments ne sera pas valide sur cette branche.
Quand il est écrit "Tout à jour", cela signifie "toutes les branches que vous m'avez expliquées comment pousser sont à jour".
Q. Alors, comment puis-je pousser mes commits?
Si ce que vous voulez faire est de mettre vos modifications de develop
dans Origin/master
, alors vous devriez probablement les fusionner dans votre master
locale puis appuyez sur:
git checkout master
git merge develop
git Push # will Push 'master'
Si vous voulez créer une branche develop
sur la télécommande, distincte de master
, fournissez les arguments pour git Push
:
git Push Origin develop
Cela va: créer une nouvelle branche sur la télécommande appelée develop
; et mettez cette branche à jour avec votre branche develop
locale; et définissez develop
sur Push to Origin/develop
pour qu'à l'avenir, git Push
sans arguments sera Push develop
automatiquement.
Si vous voulez envoyer votre develop
locale à une branche distante appelée quelque chose autre quedevelop
, vous pouvez dire:
git Push Origin develop:something-else
Cependant, ce formulaire (non) permet à develop
de toujours utiliser Push to Origin/something-else
à l'avenir; c'est une opération ponctuelle.
Cela m'est arrivé lorsque mon application SourceTree est tombée en panne lors de la mise en place. Et sur la ligne de commande, il semblait que l'ancien git add
avait été corrompu. Si c'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
N'oubliez pas que cela suffit si vous n'avez pas effectué de branche ou de ce genre. Dans ce cas, assurez-vous que vous appuyez sur la branche appropriée, telle que git Push Origin develop
.
Essayer:
git Push --all Origin
S'il vous plaît essayez d'aller au dernier commit et faites ensuite git Push Origin HEAD:master
.
En ce moment, il semble que vous soyez sur la branche develop. Avez-vous une branche de développement sur votre origine? Sinon, essayez git Push Origin develop
. git Push
fonctionnera dès qu’il aura connaissance d’une branche de développement sur votre origine.
Pour en savoir plus, je regarderais les pages de manuel git-Push , en particulier, la section exemples.
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 de créer dans une nouvelle branche locale, puis de pousser cette branche vers distante. Pour cela, vous devez indiquer où vous souhaitez appliquer vos modifications à distance ... .. Vous pouvez le faire en mentionnant distant au moment de l'envoi.
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
J'ai essayé de nombreuses méthodes, y compris celles définies ici . Ce que j'ai obtenu 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
Assurez-vous également que vous appuyez sur la branche appropriée.
Pour mon cas, aucune des autres solutions n'a fonctionné. Je devais faire une sauvegarde des nouveaux fichiers modifiés (avec git status
) et exécuter un git reset --hard
. Cela m'a permis de 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, en tant que solution de "dernière chance".
Cela m'est arrivé lorsque j'ai ^C
au milieu d'un git Push
envoyé à GitHub. GitHub n'a toutefois pas montré que les modifications avaient été apportées.
Pour résoudre ce problème, j'ai apporté une modification à mon arbre de travail, j'ai validé, puis de nouveau activé. Cela a fonctionné parfaitement bien.
Cela m'est arrivé Je viens de ré-engager les changements, puis ça a poussé.
Merci à Sam Stokes. Selon sa réponse, vous pouvez résoudre le problème de différentes manières (j'ai utilisé cette méthode). Après avoir mis à jour votre répertoire de développement, vous devez le réinitialiser.
git init
Ensuite, vous pouvez commettre et pousser les mises à jour à maîtriser
Au lieu de cela, vous pouvez essayer ce qui suit. Vous n'êtes pas obligé d'aller à master
; vous pouvez forcer directement les modifications de votre branche elle-même.
Comme expliqué ci-dessus, lorsque vous créez une base, vous modifiez l'historique de votre branche. En conséquence, si vous essayez de faire un git Push
normal après une base, Git la rejettera car il n’existe pas de chemin direct entre la validation sur le serveur et la validation sur votre branche. Au lieu de cela, vous devrez utiliser le drapeau -f
ou --force
pour dire à Git que oui, vous savez vraiment ce que vous faites. Lorsque vous effectuez des pressions forcées, il est vivement recommandé de définir votre paramètre Push.default
config 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 lancer:
$ git Push -f
Et vérifiez votre demande de traction. Il devrait être mis à jour!
Aller au bas de Comment redéfinir une demande d'extraction pour plus de détails.