web-dev-qa-db-fra.com

Déplacer les validations du maître vers une branche à l'aide de git

J'essaie d'apprendre à utiliser Git efficacement et je me demande comment je devrais (bonne pratique/mauvaise pratique?) Résoudre le cas suivant:

Disons que j'ai la chaîne de validations suivante dans master:

  • Validation initiale
  • Commit 1
  • Commit 2
  • Commit 3

Ensuite, je me rends compte que ce qui a été fait lors des deux dernières validations est complètement faux et je dois recommencer à partir de la validation 1. Des questions:

  • Comment dois-je faire ça?
  • Puis-je déplacer Commit 2 et 3 vers une branche distincte à 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 le maître?
62
Paul
git branch tmp            # mark the current commit with a tmp branch
git reset --hard Commit1  # revert to Commit1

Le SO answer " Quelle est la différence entre 'git reset' et 'git checkout' dans git? " est assez instructif pour ce type d'opération

alt text

A git reset --hard HEAD~2 ferait la même chose (sans avoir à récupérer le SHA1 pour Commit1 première).

Puisque Commit2 et Commit3 sont toujours référencés par une référence Git (ici une branche), vous pouvez toujours y revenir à tout moment (git checkout tmp).


En fait, Darien mentionne dans les commentaires (concernant le déplacement Commit2 et Commit3 vers une autre branche):

Engagé accidentellement dans la mauvaise branche, cela m'a permis de le déplacer:

git checkout correctbranch
git rebase tmp
git branch -d tmp

Cela fonctionne ici puisque la branche initiale a été réinitialisée sur Commit1, ce qui signifie que le git rebase tmp rejouera chaque commit après Commit1 (alors ici Commit2 et Commit3) au nouveau 'correctbranch'.

74
VonC