Easiest (sécurité) façon serait de créer une branche temporaire pointant vers votre tête, maître de la caisse, fusionner la branche temporaire, puis supprimez-le:
git branch temp
git checkout master
git merge temp
git branch -d temp
Vous pouvez également éviter d'utiliser la branche temp, et il suffit d'utiliser le reflog pour obtenir les commits de pas de branche:
git checkout master
git merge [email protected]{1}
[email protected]{1}
ici fait référence à la précédente livraison que vous avez vérifié; [email protected]{0}
est la même que HEAD
, la validation en cours à partir de laquelle vous travaillez. Si vous voulez voir tous les commits précédent HEAD
a souligné (qui n'a pas encore expiré), vous pouvez faire:
git reflog
Vous avez dit que cela est arrivé parce que vous essayiez de défaire commits. Comme le souligne mletterle, vous pouvez le faire avec un git reset
. git reset --hard rev
définira la branche sur laquelle vous êtes, HEAD, votre index et votre copie de travail à une révision particulière. Notez que cela effacera les modifications non validées, donc faites-le seulement si vous savez vraiment ce que vous faites. Plus sûr serait généralement de faire git reset rev
, ce qui n'affecte pas votre copie de travail, puis sélectivement retourner les fichiers individuels dans votre copie de travail avec git checkout
, afin de s'assurer que vous ne détruisez pas accidentellement certains travaux que vous faisiez.
En outre, git reset
ne doit généralement être utilisé que sur des validations non-poussées. Si vous essayez d'annuler quelque chose qui a déjà été poussé, et que d'autres personnes ont déjà fusionné, vous voulez généralement git revert
.
Je ne pense pas que vous seriez en mesure de commettre (pas de branche), mais si vous l'avez fait, et vous n'avez pas à vous soucier des changements non validés, vous devriez juste être en mesure de pousser retour au maître et soit avance rapide ou fusionner là. –
@Rob Vous êtes en mesure de vous engager lorsque vous n'êtes sur aucune branche; il n'y a rien qui vous empêche de le faire. Vous ne pouvez pas pousser vers une branche qui ne peut pas être transférée rapidement, et 'git checkout -m' ne fusionnera pas les commits que vous avez faits quand vous n'étiez pas sur une branche; il fusionne uniquement les modifications qui se trouvent dans votre copie de travail ou votre index. Si vous suivez ces instructions, vous pourriez perdre les commits que vous avez faits (cependant, ils seront toujours dans le reflog). –
@Brian Vous avez raison. Au début, je supposais qu'il avait juste un index et voulait revenir au maître. Après avoir obtenu des éclaircissements sur la situation, j'aime beaucoup mieux votre réponse. Tournez (pas de branche) dans une branche nommée, puis fusionnez comme d'habitude. –