J'ai commencé à travailler sur certains fichiers que j'avais dans un sous-module git dans le cadre d'un autre projet. Cependant, comme il s'agissait d'un sous-module git, il n'a jamais extrait "master" et a simplement extrait la tête et placé tous les fichiers dans le dossier "no branch".
Maintenant que j'ai apporté des modifications par accident à ces fichiers, je viens de réaliser que je travaillais dans un sous-module "sans branche" de mon projet.
Comment puis-je obtenir ces fichiers dans une branche (comme maître) afin de pouvoir les sauver?
git merge $COMMIT_SHA
fois que j'étais dans l'autre branche.L'état «sans branche» est appelé HEAD détaché. Il est appelé ainsi car la référence HEAD n'est attachée à aucune branche, mais pointe directement sur une validation. Pour attacher HEAD à une branche qui pointe vers la validation HEAD actuelle, utilisez
git checkout -b branchname
.Vous pouvez mettre à jour en toute sécurité une branche existante pour inclure les validations dans HEAD avec cette séquence:
Ou, de manière équivalente, en utilisant la notation reflog
HEAD@{1}
pour éviter d'avoir à créer la branche temporaire:Utiliser la branche temporaire serait une bonne idée si vous n'alliez pas faire la fusion immédiatement.
Si vous souhaitez écraser de force une branche existante pour pointer vers la validation sur HEAD, vous pouvez l'utiliser
git branch -f branchname && git checkout branchname
. Si la validation sur HEAD n'est pas basée sur la pointe actuelle du nom de la branche, cela entraînera une modification non rapide vers le nom de la branche que vous souhaitez généralement éviter (elle est considérée comme un historique de réécriture).la source
Pour ajouter aux réponses précédentes:
Pendant que vous êtes toujours sur une tête détachée, vous pouvez ajouter une balise:
Cela ajoutera une balise au commit, ce qui la rendra visible dans
gitk
et dans d' autres outils.la source