Déplacer s'engage auprès de maître sur une branche à l'aide de git

j'essaie d'apprendre à utiliser Git efficacement et je me demande comment je devrais (Bonne/Mauvaise pratique?) résoudre le cas suivant:

dis que j'ai la chaîne suivante de commits en master:

  • Initial s'engager
  • Priorité 1
  • Priorité 2
  • Priorité 3

alors je réalise que ce qui est fait dans les deux derniers commits est complètement faux et je dois recommencer à partir de Commit 1. Questions:

  • Comment faire?
  • est-ce que je peux déplacer les Commit 2 et 3 à une branche séparée pour les conserver pour référence future (disons qu'ils n'étaient pas si mauvais après tout) et continuer à travailler à partir de Commit 1 sur master?
59
demandé sur bstpierre 2010-09-15 19:15:20
la source

1 ответов

git branch tmp            # mark the current commit with a tmp branch
git reset --hard Commit1  # revert to Commit1

La AFIN de répondre à " Quelle est la différence entre "git reset" et "git checkout" dans git? " est très instructive pour ce type d'opération

alt text

Un git reset --hard HEAD~2 ferait la même chose (sans avoir besoin de récupérer le SHA1 pour Commit1 en premier).

depuis Commit2 et Commit3 sont toujours de référence par un git ref (ici une branche), vous pouvez toujours y revenir quand vous voulez ( git checkout tmp ).


en fait, Darien mentions dans les commentaires (concernant le déplacement Commit2 et Commit3 à une autre branche):

accidentellement commis à la mauvaise branche, cela m'a permis de le déplacer, a fait:

git checkout correctbranch
git rebase tmp
git branch -d tmp

cela fonctionne ici depuis le premier la branche a été réinitialisée à Commit1 , ce qui signifie que le git rebase tmp rejouera chaque commit après Commit1 (donc ici Commit2 et Commit3 ) au nouveau correctbranch ".

70
répondu VonC 2017-05-23 14:54:53
la source

Autres questions sur git git-reset commit git-branch