J'ai fait une erreur et j'ai commencé à faire des commits "jusqu'à la dernière balise", ce qui fait que mes commits sont "sans branche". Ils auraient dû être appliqués à la tête d'une succursale déjà existante. J'ai pas encore poussé mes changements. J'ai trouvé quelques autres questions pour savoir quand les validations sont dans la branche erronée, mais maintenant j'ai non branche, donc je ne sais pas comment gérer cela.
De préférence, je voudrais effacer complètement mon erreur et "déplacer" mes modifications à la fin de la branche de droite. Si je dois laisser mon erreur dans l'histoire, je dois les fusionner au moins.
Vous êtes actuellement dans un état HEAD détaché. Pour résoudre ce problème, il vous suffit de créer une nouvelle branche avec git branch <branchname>
ou git checkout -b <branchname>
. Cela vous laissera une branche locale avec laquelle vous pourrez jouer, et même la supprimer lorsque vous en aurez terminé.
Les branches dans git ne sont que pointeurs pour les commits, donc si vous créez une nouvelle branche où vous êtes, la nouvelle branche pointera vers votre commit actuel, puis vous peut le fusionner ou autre chose.
Votre "erreur" doit ne pas être effacée, vous avez simplement créé de nouveaux commits en plus des précédents. Vous n'avez pas modifié l'historique ou quelque chose comme ça.
EDIT: En réponse à votre commentaire, ce que vous devez faire est:
git branch temp
git checkout master # or any other branch
git merge temp
git branch -d temp
Vous pouvez afficher tous vos validations à l'aide de git reflog
Vous pouvez donc simplement accéder à une autre branche et faire git cherry-pick <commit-hash>
pour les validations requises.
Mais je préfère le chemin de la branche comme spatz
mentionné.
Remarque: vous avez également
Dans les deux cas, faire une branche tmp
et la fusionner de nouveau à la branche réelle est la solution.
Une autre solution, qui n'implique pas la création d'une branche temporaire, est décrite ici . Vous fusionnez simplement avec votre dernier commit plutôt qu'avec une branche temporaire.
$ git checkout master
$ git merge d2bdb98
Si vous ne savez pas sur quel commit vous êtes, vous pouvez le trouver avec git log
. Je ne sais pas si cette solution est différente de la "sélection des cerises" mais elle a eu les résultats escomptés pour moi.
Je viens d'avoir une situation où j'avais une branche master
sur laquelle je voulais m'engager, mais accidentellement engagée dans une HEAD
détachée (notez que le hachage de validation n'est pas important ici, mais juste pour illustrer la situation):
$ git branch
* (detached from 29d2cfb)
master
Voici ma solution rapide:
$ git branch -f master HEAD
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'Origin/master' by 1 commit.
(use "git Push" to publish your local commits)
Part de gâteau.
Notez que cette astuce ne fonctionne que si master
a initialement pointé sur le même commit que vous avez fait votre commit erroné. Si ce n'est pas le cas, vous devrez rebaser (ou choisir, ou fusionner ...).