Comment puis-je déplacer mon travail et mes modifications de la branche master
vers une nouvelle branche créée et laisser la branche master intacte après le déplacement?
Salut @Mark Fisher, que veux-tu dire par "2 fois"?
Comment puis-je déplacer mon travail et mes modifications de la branche master
vers une nouvelle branche créée et laisser la branche master intacte après le déplacement?
Si les modifications ne sont pas validées.
vous pouvez ranger les modifications dans la branche principale.
git stash
ensuite vérifiez la branche
git checkout -b nouveaubranche
et récupérez les modifications ici
git stash pop
Si les modifications sont validées :
ensuite créez une nouvelle branche :
git checkout -b nouveaubranche
revenez à la branche principale :
git checkout master
réinitialisez le commit précédent :
git reset --hard head^1
NB : Cela fonctionne uniquement si aucun fichier n'a été créé et seuls les fichiers existants ont été modifiés
Vous pouvez créer une nouvelle branche pointant vers le commit actuel en utilisant git branch nombranche
(ou git checkout -b nombranche
si vous voulez le vérifier directement). Cela dupliquera essentiellement votre branche principale, de sorte que vous puissiez continuer à travailler dessus.
Si vous avez réussi à copier la branche, vous pouvez réinitialiser master
à son point d'origine en utilisant git reset --hard commit
où commit
est le hachage du commit qui devrait être le dernier sur master.
Donc par exemple, si vous avez une situation comme celle-ci :
---- 1 ---- 2 ---- 3 ---- 4 ---- 5 ---- 6
^ ^
original master
commit master
Donc vous avez vérifié master
sur le commit 6
, et vous voulez créer une nouvelle branche ticket
pointant vers ce 6
tout en réinitialisant master
à 3
:
git branch ticket
git reset --hard 3
git checkout ticket
Et maintenant vous êtes sur ticket
pointant vers le commit 6
, tandis que master
pointe vers 3
.
Si vous avez validé (disons) 2 fois après avoir réalisé que vous auriez dû être dans une branche, il vous suffit de faire
git branch work_branch
git reset --hard HEAD~2
remplacez le 2 par le nombre de validations en arrière auxquelles vous voulez revenir. Vous serez toujours sur master à ce stade, si vous voulez passer à la branche pour continuer le travail, faites simplement git checkout work_branch
voir git rev-parse --help
si vous voulez comprendre la syntaxe pour remonter dans votre arborescence de validations avec des références comme HEAD~2
J'ai résolu ce problème en adoptant l'approche suivante
Étape 1: Créez une nouvelle branche à partir de la branche infectée master
et donnez-lui un nom tel que master_infected
;
Étape 2: maintenant effectuez un hard reset
sur la branche infectée master
pour supprimer les commits
pollués en utilisant
git reset --hard HEAD~2
(retournez de deux commits
avant HEAD
car dans mon cas j'avais deux commits
pollués. donc pour votre cas cela peut être différent )
Maintenant ma branche master_infected
contient le code que je veux préserver (comme je l'ai dit mon code pollué) et la branche master
est maintenant en mode sécurisé.
Créez une nouvelle branche à partir de celle que vous auriez dû avoir, puis appliquez sélectivement les modifications de la branche incorrecte dans la nouvelle branche.
Vous pouvez ensuite supprimer la mauvaise branche, en supposant que vous ne l'ayez pas encore poussée ailleurs et que d'autres modifications ont été apportées à cette branche.
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.