Git: "pas actuellement sur aucune branche."Est-il un moyen facile de revenir sur une branche, tout en gardant les changements?

donc j'ai fait un peu de travail dans le dépôt et quand je suis sur le point de m'engager je me rends compte que je ne suis actuellement sur aucune branche.

cela arrive souvent quand on travaille avec des sous-modules et je suis capable de le résoudre, mais le processus est fastidieux et j'ai pensé qu'il doit y avoir un moyen plus facile de le faire.

Est-il un moyen facile de revenir sur une branche, tout en gardant les changements?

176
demandé sur Erik B 2011-01-19 16:05:21

8 réponses

si vous n'avez pas commis:

git stash
git checkout some-branch
git stash pop

si vous avez commis et n'avez rien changé depuis:

git log --oneline -n1 # this will give you the SHA
git checkout some-branch
git merge ${commit-sha}

Si vous avez commis, puis fait du travail supplémentaire:

git stash
git log --oneline -n1 # this will give you the SHA
git checkout some-branch
git merge ${commit-sha}
git stash pop
177
répondu araqnid 2017-02-23 06:58:26

cela m'a aidé

git checkout -b newbranch
git checkout master
git merge newbranch
git branch -d newbranch
148
répondu babay 2016-12-22 18:34:21
git checkout master

C'est le résultat quelque chose comme ça:

Warning: you are leaving 2 commits behind, not connected to
any of your branches:

1e7822f readme
0116b5b returned to clean django

If you want to keep them by creating a new branch, this may be a good time to do so with:
git branch new_branch_name 1e7822f25e376d6a1182bb86a0adf3a774920e1e

alors, faisons-le:

git merge 1e7822f25e376d6a1182bb86a0adf3a774920e1e
22
répondu m_messiah 2013-05-31 05:02:50

en Laissant l'autre façon ici

git branch newbranch
git checkout master 
git merge newbranch 
11
répondu Observer 2013-05-10 19:20:03

alternativement, vous pouvez configurer vos sous-modules de sorte que plutôt que d'être dans leur état de tête détaché par défaut vous vérifiez une branche.

modifié pour ajouter:

une façon est de vérifier une branche particulière du sous-module lorsque vous l'ajoutez avec le drapeau-b:

git submodule add -b master <remote-repo> <path-to-add-it-to>

une autre façon est de simplement aller dans le répertoire submodule et juste le vérifier

git checkout master
9
répondu Abizern 2011-01-20 23:05:57

j'ai récemment rencontré ce problème à nouveau. Cela fait longtemps que je n'ai pas travaillé avec des sous-modules et en ayant appris plus sur git j'ai réalisé que simplement vérifier la branche que vous voulez engager est suffisant. Git gardera l'arbre qui fonctionne même si vous ne le planquez pas.

git checkout existing_branch_name

Si vous voulez travailler sur une nouvelle branche qui devrait fonctionner pour vous:

git checkout -b new_branch_name

la caisse échouera si vous avez des conflits dans l'arbre de travail, mais cela devrait être assez inhabituel et si cela arrive, vous pouvez simplement le cacher, l'éclater et résoudre le conflit.

comparé à la réponse acceptée, cette réponse vous sauvera 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 points positifs (ou du moins proches) que la réponse actuellement acceptée.

4
répondu Erik B 2017-05-15 09:50:06

la méthode suivante peut fonctionner:

git rebase HEAD master
git checkout master

cela va rebaser vos changements de tête actuels sur le dessus du maître. Ensuite, vous pouvez changer la direction générale.


autre façon est à la caisse de la direction de la première:

git checkout master

alors Git devrait afficher SHA1 de vos commits détachés, alors vous pouvez les choisir, par exemple

git cherry-pick YOURSHA1

ou vous pouvez également fusionner le dernier l'un:

git merge YOURSHA1

pour voir toutes vos commits de différentes branches (pour vous assurer que vous les avez), Lancez: git reflog .

1
répondu kenorb 2017-01-14 13:01:36

je sais que j'ai dit à babay en 2012 que je pensais qu'il était peu probable que quelqu'un ne se rendrait pas compte qu'ils n'étaient pas sur une branche et s'engager. Cela vient de m'arriver, donc je suppose que je dois admettre que j'avais tort, mais étant donné qu'il a fallu jusqu'en 2016 pour que cela m'arrive, vous pourriez soutenir que c'est en fait peu probable.

de toute façon, créer une nouvelle branche est exagéré à mon avis. Tout ce que vous avez à faire est:

git checkout some-branch
git merge commit-sha

si vous n'avez pas copié commit-sha avant de vérifier l'autre branche, vous pouvez facilement la trouver en exécutant:

git reflog
0
répondu Erik B 2016-07-11 18:27:59