web-dev-qa-db-fra.com

Git, Comment réinitialiser Origin / master sur un commit?

Je réinitialise mon maître local à un commit par cette commande:

git reset --hard e3f1e37

quand j'entre la commande $ git status, 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

Etant donné que je veux également réinitialiser Origin/header, je passe à Origin/master:

$ 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 avec cette commande:

$ git reset --hard e3f1e37
HEAD is now at e3f1e37 development version code incremented for new build.

Ensuite, j'ai essayé d'ajouter commit à Origin/header que je n'avais 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 passe la caisse chez 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, je réinitialise la tête de Origin/master. Je m'attends à local et Origin doit être dans la même direction, mais comme vous le voyez, git dit que mon local/maître est derrière Origin/master de 7 commits.

Comment puis-je résoudre ce problème? Ce que je recherche, c’est le chef de section local/maître et Origine/maître pointent vers le même engagement. L'image suivante montre ce que j'ai fait. Merci.

enter image description here

210
Hesam

Origin/xxx les branches sont toujours un pointeur sur une télécommande. Vous ne pouvez pas les extraire car ils ne sont pas pointés sur votre référentiel local (vous ne vérifiez 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, c’est d’obliger vos modifications locales à maîtriser:

git checkout master
git reset --hard e3f1e37
git Push --force Origin master
# Then to prove it (it won't print any diff)
git diff master..Origin/master
494
Simon Boudrias

La solution trouvée ici nous a aidés à mettre à jour master avec un commit précédent qui avait déjà été poussé:

git checkout master
git reset --hard e3f1e37
git Push --force Origin e3f1e37:master

La différence principale par rapport à la réponse acceptée est le hachage de validation "e3f1e37:" avant master dans la commande Push.

46
jkovacs

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 sauvegarder mes progrès sur la branche principale (je sais, j'aurais dû m'engager, m'engager là-dessus, continuer à pousser et ensuite à fusionner pour devenir maître).

Une nuit tardive, dans une 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 à Origin. 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 Origin/upstream (duh!) comme je le peux. branches de développement local.

Donc, je n'ai pas acheté de master localement parce que je le faisais déjà après un commit. Maître était inchangé. Je n'avais même pas besoin de réinitialiser - dur, mon commit actuel était OK.

Je viens de forcer Push to Origin, sans même spécifier le commit que je voulais forcer sur master car dans ce cas, il en est de même de HEAD. 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, pardonnez s'il vous plaît!).

Donc, si vous êtes déjà d'accord avec votre branche principale localement, il suffit de:

git Push --force Origin master
git diff master..Origin/master
1

En supposant que votre branche s'appelle master ici et à distance, et que votre télécommande s'appelle Origin, vous pouvez faire:

git reset --hard <commit-hash>
git Push -f Origin master

Toutefois, vous devriez éviter cela si quelqu'un d'autre travaille avec votre référentiel distant et a extrait vos modifications. Dans ce cas, il serait préférable d’annuler les commits que vous ne voulez pas, puis Push normalement.

0
Mahmoud Zaher