J'ai donc fait un peu de travail dans le référentiel et quand je suis sur le point de valider, je me rends compte que je ne suis actuellement sur aucune branche.
Cela se produit souvent lorsque je travaille avec des sous-modules et je suis en mesure de le résoudre, mais le processus est fastidieux et j'ai pensé qu'il devait y avoir un moyen plus simple de le faire.
Existe-t-il un moyen simple de revenir sur une branche, tout en conservant les modifications?
git
branch
git-checkout
Erik B
la source
la source
git show
ougit rev-parse HEAD
), passez à la branche puisgit cherry-pick
suivi du hash de commit.git merge _hash_
git merge <hash-of-the-commit-you-just-made>
.cela m'a aidé
la source
C'est le résultat quelque chose comme ceci:
Alors faisons-le:
la source
git gc
entre l'exécution de ces deux commandes, vous perdriez ces commits, mais à moins que vous ne s'exécutiezgit gc
automatiquement, cela devrait être une approche assez sans risque. J'irais toujours avec la réponse de babay, mais si vous voulez vous éviter d'écrire deux commandes supplémentaires, je suppose que c'est la voie à suivre.Partir d'une autre manière ici
la source
Alternativement, vous pouvez configurer vos sous-modules de sorte que plutôt que d'être dans leur état de tête détachée par défaut, vous extrayiez une branche.
Modifié pour ajouter:
Une façon consiste à extraire une branche particulière du sous-module lorsque vous l'ajoutez avec l'indicateur -b:
Une autre façon consiste à simplement aller dans le répertoire du sous-module et à le vérifier
la source
gitmodules
peut-être?Une façon de se retrouver dans cette situation consiste à effectuer un rebase à partir d'une branche distante. Dans ce cas, les nouveaux commits sont pointés par
HEAD
maismaster
ne les pointent pas - ils pointent vers où ils se trouvaient avant de rebaser l'autre branche.Vous pouvez faire de ce commit votre nouveau
master
en faisant:Cela se met
master
à jour de force pour pointer versHEAD
(sans vous mettre dessusmaster
) puis passe àmaster
.la source
J'ai récemment rencontré à nouveau ce problème. Cela fait un moment que je n'ai pas travaillé pour la dernière fois avec des sous-modules et après avoir appris plus sur git, j'ai réalisé qu'il suffit de vérifier la branche sur laquelle vous souhaitez vous engager. Git gardera l'arbre de travail même si vous ne le cachez pas.
Si vous souhaitez travailler sur une nouvelle branche, cela devrait fonctionner pour vous:
La récupération échouera si vous avez des conflits dans l'arborescence de travail, mais cela devrait être assez inhabituel et si cela se produit, vous pouvez simplement le cacher, le faire éclater et résoudre le conflit.
Par rapport à la réponse acceptée, cette réponse vous fera économiser l'exécution de deux commandes, qui ne prennent pas vraiment beaucoup de temps à exécuter de toute façon. Par conséquent, je n'accepterai pas cette réponse, à moins qu'elle n'obtienne miraculeusement plus de votes positifs (ou du moins proches) que la réponse actuellement acceptée.
la source
La méthode suivante peut fonctionner:
Cela rebasera vos modifications HEAD actuelles au-dessus du maître. Ensuite, vous pouvez changer de branche.
Une autre méthode consiste à vérifier d'abord la succursale:
Ensuite, Git devrait afficher SHA1 de vos commits détachés, vous pouvez ensuite les sélectionner, par exemple
Ou vous pouvez également fusionner le dernier:
Pour voir tous vos commits de différentes branches (pour vous assurer que vous les avez), exécutez:
git reflog
.la source
Je sais que j'ai dit à babay en 2012 que je pensais qu'il était peu probable que quelqu'un ne se rende pas compte qu'il n'était pas dans une succursale et ne s'engageait pas. Cela vient de m'arriver, donc je suppose que je dois admettre que je me trompais, mais étant donné qu'il a fallu attendre 2016 pour que cela m'arrive, vous pourriez dire que c'est en fait peu probable.
Quoi qu'il en soit, la création d'une nouvelle branche est exagérée à mon avis. Tout ce que tu dois faire est:
Si vous n'avez pas copié le commit-sha avant de vérifier l'autre branche, vous pouvez facilement le trouver en exécutant:
la source