61 votes

Déplacer les commits de master vers une branche en utilisant 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 commits suivante dans master :

  • Engagement initial
  • Engagement 1
  • Engagement 2
  • Engagement 3

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

  • Comment dois-je m'y prendre ?
  • Puis-je déplacer les Commit 2 et 3 vers une branche séparée pour les garder comme référence future (en disant qu'ils n'étaient pas si mauvais après tout) et continuer à travailler à partir du Commit 1 sur master ?

74voto

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

La réponse du SO " Quelle est la différence entre "git reset" et "git checkout" dans git ? "est très instructif pour ce type d'opération.

alt text

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

Depuis Commit2 et Commit3 sont toujours référencés par une référence Git (ici une branche), vous pouvez toujours revenir dessus quand vous le souhaitez ( git checkout tmp ).


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

Je me suis accidentellement engagé sur la mauvaise branche, ça m'a permis de le déplacer, c'est fait :

git checkout correctbranch
git rebase tmp
git branch -d tmp

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X