En utilisant git, j'ai fait quelque chose comme ça
git clone
git checkout {a rev number tree rev before} (here I started to be in a detached head state)
//hacking
git commit
//hacking
git commit
(some commit where made on origin/master)
git pull (which does complete because there was some error due to the fact that I'm no more on master)
Parce qu'il m'a dit que je pouvais encore m'engager dans un état de tête détachée, je l'ai fait. Mais maintenant, je veux fusionner ma branche principale détachée et ma branche principale locale, puis pousser mon groupe de modifications vers origine / maître.
Donc, ma question est de savoir comment fusionner la branche principale avec mon état actuel (tête détachée)
git
git-checkout
benzen
la source
la source
Réponses:
Créez une branche où vous êtes, puis passez en master et fusionnez-la:
la source
Vous pourriez faire quelque chose comme ça.
Encore plus simple serait
mais cela a le léger danger que si vous faites une erreur, il peut être un peu plus difficile de récupérer les commits effectués sur la tête détachée.
la source
git merge HEAD@{1}
vous devriez probablement vous assurer que c'est celle que vous souhaitez utiliser en utilisantgit reflog
C'est ce que j'ai fait:
Fondamentalement, considérez le
detached HEAD
comme une nouvelle branche, sans nom. Vous pouvez vous engager dans cette branche comme n'importe quelle autre branche. Une fois que vous avez fini de vous engager, vous voulez le pousser vers la télécommande.Donc, la première chose que vous devez faire est de lui donner
detached HEAD
un nom. Vous pouvez facilement le faire comme, tout en étant sur cecidetached HEAD
:Vous pouvez maintenant le pousser à distance comme n'importe quelle autre branche.
Dans mon cas, je voulais également avancer rapidement cette branche à maîtriser avec les commits que j'ai faits dans le
detached HEAD
(maintenantsome-new-branch
). Tout ce que j'ai fait, c'estgit pull # To make sure my local copy of master is up to date
git merge master // This added current state of master to my changes
Bien sûr, je l'ai fusionné plus tard
master
.C'est à peu près ça.
la source
git checkout -b new-branch
travaillé pour moi. Les autres suggestions s'imposaientgit branch new-branch
, mais cela me laissait toujours dans la tête détachée et la nouvelle branche n'a pas repris mes changements.Vous pouvez simplement faire
git merge <commit-number>
ougit cherry-pick <commit> <commit> ...
Comme suggéré par Ryan Stewart, vous pouvez également créer une branche à partir du HEAD actuel:
Ou juste un tag:
la source
git rev-parse HEAD
En cas de HEAD détaché, le travail est validé comme d'habitude, sauf qu'aucune branche nommée n'est mise à jour. Pour obtenir la branche principale mise à jour avec vos modifications validées, créez une branche temporaire où vous vous trouvez (de cette façon, la branche temporaire aura toutes les modifications validées que vous avez apportées dans la tête détachée), puis passez à la branche principale et fusionnez la branche temporaire avec le maître.
la source
Une solution facile est de simplement créer une nouvelle branche pour ce commit la caisse à elle:
git checkout -b <branch-name> <commit-hash>
.De cette façon, toutes les modifications que vous avez apportées seront enregistrées dans cette branche. Au cas où vous auriez besoin de nettoyer votre branche principale des commits restants, assurez-vous de l'exécuter
git reset --hard master
.Avec cela, vous allez réécrire vos branches alors assurez-vous de ne déranger personne avec ces changements. N'oubliez pas de consulter cet article pour une meilleure illustration de l' état HEAD détaché .
la source
Ce n'est peut-être pas la meilleure solution (réécrira l'historique) mais vous pourriez aussi le faire
git reset --hard <hash of detached head commit>
.la source