Je réinitialise mon maître local à un commit par cette commande:
git reset --hard e3f1e37
lorsque j'entre dans la $ git status
commande, le terminal dit:
# On branch master
# Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.
# (use "git pull" to update your local branch)
#
nothing to commit, working directory clean
Étant donné que je souhaite également réinitialiser l'origine / l'en-tête, je passe à l'origine / maître:
$ git checkout origin/master
Note: checking out 'origin/master'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at 2aef1de... master problem fixed for master. its okay now.
et réinitialiser l'en-tête par cette commande:
$ git reset --hard e3f1e37
HEAD is now at e3f1e37 development version code incremented for new build.
Ensuite, j'ai essayé d'ajouter un commit à l'origine / en-tête qui n'a pas réussi.
$ git commit -m "Reverting to the state of the project at e3f1e37"
# HEAD detached from origin/master
nothing to commit, working directory clean
Enfin, je commande à mon maître local.
$ git checkout master
Switched to branch 'master'
Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
Depuis, j'ai réinitialisé la tête d'origine / maître, je m'attends à ce que local et origine soient dans la même direction, mais comme vous le voyez, git dit que mon local / maître est derrière origine / maître de 7 commits.
Comment puis-je résoudre ce problème? Ce que je recherche, c'est que le responsable local / master et le point origin / master pointent vers le même commit. L'image suivante montre ce que j'ai fait. Merci.
la source
Réponses:
origin/xxx
les branches pointent toujours vers une télécommande. Vous ne pouvez pas les extraire car ils ne pointent pas vers votre référentiel local (vous ne récupérez que la validation. C'est pourquoi vous ne verrez pas le nom écrit dans le marqueur de branche de l'interface de ligne de commande, uniquement le hachage de validation).Ce que vous devez faire pour mettre à jour la télécommande est de forcer le push de vos modifications locales vers le master:
la source
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
La solution trouvée ici nous a aidés à mettre à jour master vers un commit précédent qui avait déjà été poussé:
La principale différence par rapport à la réponse acceptée est le hachage de validation "e3f1e37:" avant master dans la commande push.
la source
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
you should pull first
:)git config receive.denynonfastforwards false
mais en fait, je l'ai défini manuellement dans mon référentiel git local que j'ai en ce/opt/git
que j'ai créé pour jouer avec les idées ici. Je ne sais pas comment ou si cela peut être fait pour bitbucket, github etc ... Et @intuitivepixel qui est inutile car il inverse ce que vous essayez de réaliser avec la réinitialisation matérielle.En supposant que votre branche est appelée
master
ici et à distance, et que votre télécommande est appelée,origin
vous pouvez faire:Cependant, vous devez éviter de le faire si quelqu'un d'autre travaille avec votre référentiel distant et a retiré vos modifications. Dans ce cas, il serait préférable de revenir sur les commits que vous ne voulez pas, puis de pousser comme d'habitude.
la source
Depuis que j'ai eu une situation similaire, j'ai pensé partager ma situation et comment ces réponses m'ont aidé (merci à tous).
J'ai donc décidé de travailler localement en modifiant mon dernier commit chaque fois que je voulais enregistrer ma progression sur la branche principale (je sais, j'aurais dû me diversifier, m'engager sur ce point, continuer à pousser et fusionner plus tard avec le master).
Un soir tard, dans la peur paranoïaque de perdre ma progression vers une défaillance matérielle ou quelque chose hors de l'éther, j'ai décidé de pousser le maître à l'origine. Plus tard, j'ai continué à modifier ma branche principale locale et quand j'ai décidé qu'il était temps de pousser à nouveau, j'ai été confronté à différentes branches principales et j'ai découvert que je ne pouvais pas modifier l'origine / en amont ( duh! ) Comme je peux les branches de développement local.
Je n'ai donc pas vérifié le maître localement car j'étais déjà après un commit. Le Maître était inchangé. Je n'avais même pas besoin de réinitialiser --hard, mon commit actuel était OK.
Je viens de forcer le push vers l'origine, sans même spécifier quel commit je voulais forcer sur master car dans ce cas, c'est ce que HEAD est. Vérifié
git diff master..origin/master
donc il n'y avait pas de différences et c'est tout. Tout est réparé. Merci! (Je sais, je suis un débutant git, veuillez pardonner!).Donc, si vous êtes déjà d'accord avec votre branche maître localement, juste:
la source