2010-01-07 3 views
3

Longue histoire courte *, j'ai fait des choses avec mon dépôt git que je ne sais pas comment faire, et j'ai fini par détacher ma tête, c'est-à-dire quand je commets master isn ' t à jour.Les nouveaux commits ne sont pas sur la tête

Comment puis-je résoudre ce problème? Dois-je fusionner? (Si oui, quelles sont les commandes exactes que je veux courir?)

Quand je lance la branche git, il me dit que je suis actuellement sur aucune branche

$ git branch 
* (no branch) 
    master 
  • plus longue histoire est que j'ai essayé pour annuler quelques commits et n'avait aucune idée de comment je devais faire cela. Je suppose que ce n'était pas trop long.

Répondre

2

Il y a quelques façons dont vous pouvez retrouver sur (pas de branche), mais essentiellement sa branche indésirable utilisé pour examiner les choses, par exemple vieux commits. Si vous avez édité des fichiers par erreur (pas de branche), vous pouvez revenir à master comme vous le feriez avec n'importe quelle autre branche avec des changements. Consultez l'aide pour git-checkout, mais vous allez vouloir faire quelque chose comme git-checkout -m pour revenir à master et fusionner votre index actuel avec lui.

+0

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à. –

+0

@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). –

+0

@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. –

0

Peut-être que vous devriez retourner à la succursale sur laquelle vous travailliez. S'il était maître, il serait

$ git checkout master 
+0

Et qu'en est-il des commits que j'ai faits depuis?Je ne me suis pas rendu compte tout de suite –

5

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.

Questions connexes