2009-09-01 4 views
2

Un commit n'est pas nécessairement dans une branche, alors comment voyez-vous et gérez-vous ces commits? Aussi, est-il possible de regarder ces commits de gitk?Dans Git, comment voyez-vous et gérez-vous les validations qui ne sont pas dans une branche?

Merci beaucoup!

PS: juste pour rendre les choses plus claires, voici un exemple:

git init 
git commit 
touch toto 
git add toto 
git commit -a 
echo $RANDOM > toto 
git commit -a 
git checkout f798e54 #checkout initial commit 
echo $RANDOM > toto 
git commit -a #"untracked commit" 
gitk --all 
git branch 
git log 
git checkout master #back on the main branch 
gitk --all #untracked commit is lost? 
git log 
git branch 

Comment puis-je obtenir mon "untracked Commit" retour?

Répondre

8

Cette situation est appelée detached HEAD. Normalement, les outils (tels que gitk) ne montreront pas les commits qui ne sont pas accessibles par un nom de branche symbolique. Pour obtenir votre validation, vous pouvez utiliser git reflog pour afficher un journal de toutes les activités récentes, y compris votre HEAD détaché. Lorsque vous le trouvez, vous pouvez utiliser son ID de validation avec git checkout pour y revenir. Si vous trouvez que c'est utile, vous pouvez donner un nom à la succursale à ce moment-là.

+0

Merci beaucoup pour votre réponse détaillée! J'ai découvert toute une zone de git que je ne connaissais pas :) merci aussi à "hacker" pour avoir mentionné git fsck. –

+0

Vous n'avez pas besoin d'ID de validation pour revenir sur la branche: 'git checkout -b newbranch' serait suffisant. –

+0

La suggestion de Jakub fonctionne si vous réalisez que vous êtes sur une branche sans nom _right now_. Le tour de réflexion est utile lorsque vous vous rendez compte dix minutes plus tard après avoir visité une branche nommée. – tialaramex

2

git reflog vous montrera un nom symbolique comme [email protected]{0} que vous pouvez utiliser pour accéder à cette validation autrement inaccessible. Vous pouvez ensuite utiliser gitk --all [email protected]{0} pour voir où il existe dans votre référentiel.

3

Peut-être que vous parlez de git fsck --unreachable?

Questions connexes