Git push ne fera rien (tout est à jour))
j'essaie de mettre à jour un dépôt Git sur GitHub. J'ai fait un tas de modifications, ajouté, commis alors 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 dépôt que j'attendais.
pourquoi Git me dit-il que le dépôt est à jour alors qu'il y a des propagations locales qui ne sont pas visibles sur le dépôt?
[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)
13 réponses
git push
ne pousse pas toutes les branches locales: comment pourrait-il savoir vers quelles branches éloignées 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), quand j'exécute git remote show origin
il imprime en fait les branches qui sont configurées pour push:
Local refs configured for 'git push':
master pushes to master (up to date)
quux pushes to quux (fast forwardable)
Q. Mais je pouvais pousser à master
sans me soucier de tout ce!
quand vous git clone
, par défaut il configure votre branche locale master
pour pousser vers la branche master
de la télécommande (localement appelée origin/master
), donc si vous ne commettez que master
, alors un simple git push
repoussera toujours vos modifications.
cependant, d'après l'extrait de sortie que vous avez posté, vous êtes sur une branche appelée develop
, qui je suppose n'a pas été mis en place pour pousser à quoi que ce soit. Si git push
sans arguments ne poussera pas les commits sur cette branche.
quand il dit "tout à jour", cela signifie "Toutes les branches que vous m'avez dit comment pousser sont à jour".
Q. Alors comment puis-je pousser mes propagations?
si ce que vous voulez faire est de mettre vos changements de develop
dans origin/master
, alors vous devriez probablement les fusionner dans votre local master
puis pousser que:
git checkout master
git merge develop
git push # will push 'master'
si ce que vous voulez est de créer une develop
branche sur la télécommande, séparée de master
, puis fournir des arguments à git push
:
git push origin develop
qui va: créer une nouvelle branche sur la télécommande appelée develop
; et mettre cette branche à jour avec votre local develop
branche; et ensemble develop
pour pousser à origin/develop
de sorte que dans l'avenir, git push
sans arguments sera push develop
automatiquement.
Si vous voulez pousser votre local develop
à une branche distante appelée autre que develop
, alors vous pouvez dire:
git push origin develop:something-else
cependant, ce formulaire ne sera pas mettre en place develop
pour toujours pousser à origin/something-else
à l'avenir; il s'agit d'une opération à un coup.
cela m'est arrivé quand mon application SourceTree s'est écrasée pendant la mise en scène. Et sur la ligne de commande, il semblait que le précédent 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 pourriez avoir besoin de mettre la branche.
git push --all origin master
gardez à l'esprit que c'est suffisant si vous n'avez pas fait de branchement ou tout autre de ce genre. Dans ce cas, assurez-vous de pousser vers la bonne direction comme git push origin develop
.
s'il vous plaît essayer d'aller à la dernière commit et puis faire git push origin HEAD:master
.
en ce moment, 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 push
fonctionnera une fois qu'il connaîtra une branche de développement sur votre origine.
comme autre lecture, je voudrais avoir un regard sur le git-push man pages , en particulier, la section Exemples.
pour être précis, si vous voulez 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 requête pull créer une nouvelle branche locale et ensuite la pousser à distance. Pour cela, vous devez mentionner où vous voulez pousser vos changements à distance. Vous pouvez le faire en mentionnant à distance au moment de la poussée.
git push origin develop // It will create a remote branch with name "develop".
Si vous souhaitez créer une succursale autre que votre succursale locale nom vous pouvez le faire avec la commande suivante.
git push origin develop:some-other-name
cela m'est arrivé quand je ^C
au milieu d'un git push
à GitHub. GitHub n'a toutefois pas démontré que les changements avaient été apportés.
pour le réparer, j'ai fait un changement à mon arbre de travail, engagé, puis poussé à nouveau. Cela a fonctionné parfaitement bien.
dans mon cas, aucune autre solution n'a fonctionné. J'ai dû faire une sauvegarde de nouveaux fichiers modifiés (affichés avec git status
), et lancer un git reset --hard
. Cela m'a permis de renouer avec le serveur distant. Ajouter de nouveaux fichiers modifiés, et exécuter
git add .
git commit -am "my comment"
git push
a fait l'affaire. J'espère que cela aidera quelqu'un, comme solution de "dernière chance".
merci à Sam Stokes. Selon sa réponse, vous pouvez résoudre le problème de manière différente (j'ai utilisé de cette façon). Après avoir mis à jour votre répertoire develop, vous devriez le réinitialiser
git init
Alors que vous pouvez vous engager et de pousser les mises à jour de maître
à la place, vous pouvez essayer ce qui suit. Vous ne devez pas aller à master
; vous pouvez directement forcer les changements de votre branche elle-même.
comme expliqué ci-dessus, lorsque vous faites un rebase, vous changez l'historique de votre branche. En conséquence, si vous essayez de faire un git push
normal après un rebase, Git le rejettera parce qu'il n'y a pas de chemin direct entre la propagation sur le serveur et la propagation sur votre branche. Au lieu de cela, vous aurez besoin d'utiliser le -f
ou --force
drapeau pour dire à Git que oui, vous savez vraiment ce que vous faites. Lorsque vous faites des pushs de force, il est fortement recommandé de configurer votre configuration push.default
à simple, ce qui est la valeur par défaut dans Git 2.0. Pour vous assurer que votre configuration est correcte, Lancez:
$ git config --global push.default simple
une fois que c'est correct, vous pouvez simplement exécuter:
$ git push -f
et vérifiez votre demande de pull. Il doit être mis à jour!
aller au bas de comment reformuler une demande de Pull pour plus de détails.
ça m'est arrivé. J'ai juste réengagé les changements, et puis ça a poussé.