Que faire avec le commit fait dans une tête détachée
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 (wich does complete because there was some error due to the fact that i'm no more on master)
parce que git m'a dit que je peux commettre en acier quand dans un État de tête détaché, Je l'ai fait. Mais maintenant je veux bien fusionner ma branche de tête détachée et ma branche de maître locale, et ensuite pousser mon tas de changements à l'origine/maître.
donc ma question Est Comment pourrais-je fusionner la branche principale avec mon état actuel (tête détachée)
8 réponses
créer une branche où vous êtes, puis passer à maître et fusionner:
git branch my-temporary-work
git checkout master
git merge my-temporary-work
Vous pourriez faire quelque chose comme cela.
# Create temporary branch for your detached head
git branch tmp
# Go to master
git checkout master
# Merge in commits from previously detached head
git merge tmp
# Delete temproary branch
git branch -d tmp
encore plus simple serait
git checkout master
git merge HEAD@{1}
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 charges faites sur la tête détachée.
vous pouvez simplement faire git merge <commit-number>
ou git cherry-pick <commit> <commit> ...
comme suggéré par Ryan Stewart vous pouvez également créer une branche à partir de la tête actuelle:
git branch brand-name
ou juste une étiquette:
git tag tag-name
C'est ce que j'ai fait:
en gros, pensez au detached HEAD
comme une nouvelle branche, sans nom. Vous pouvez vous engager dans cette branche comme n'importe quelle autre. Une fois que vous avez fait commettre, vous voulez pousser à la télécommande.
donc la première chose que vous devez faire est de donner ce detached HEAD
un nom. Vous pouvez facilement le faire comme, tout en étant sur ce detached HEAD
:
git checkout -b some-new-name
Maintenant, vous pouvez le pousser à distance comme une autre branche.
dans mon cas, j'ai aussi voulu accélérer cette branche à maîtriser avec les commits que j'ai fait dans le detached HEAD
(maintenant some-new-branch
). Tout ce que j'ai fait c'était
git checkout master
git pull # To make sure my local copy of master is up to date
git checkout some-new-branch
git merge master // This added current state of master to my changes
bien sûr, je l'ai fusionné plus tard en master
.
c'est à peu près tout.
dans le cas d'une tête détachée, engage le travail comme d'habitude, sauf qu'aucune branche nommée n'est mise à jour. Pour obtenir la branche principale mise à jour avec vos changements engagés, faites une branche temporaire où vous êtes (de cette façon la branche temporaire aura tous les changements engagés que vous avez faits dans la tête détachée) , puis passez à la branche principale et fusionnez la branche temporaire avec la branche principale.
git branch temp
git checkout master
git merge temp
j'ai également fondé un article où il est expliqué comment traiter. Je l'ajoute parce qu'il est un peu différent de ce qui a été proposé. Mais je pense que toutes les propositions sont valables
http://edspencer.net/2009/10/git-what-to-do-if-you-commit-to-no-branch.html
plus tard, j'accepterai la première réponse comme la bonne
peut-être pas la meilleure solution, (réécrira l'histoire) mais vous pourriez aussi faire git reset --hard <hash of detached head commit>
.
une solution simple est de créer une nouvelle branche pour que commit et checkout à elle: git checkout -b <branch-name> <commit-hash>
.
De cette façon, toutes les modifications seront enregistrées dans cette branche. Dans le cas où vous avez besoin de nettoyer votre branche principale de restes commet être sûr d'exécuter git reset --hard master
.
avec ceci, vous allez réécrire vos branches alors assurez-vous de ne pas déranger qui que ce soit avec ces changements. Assurez-vous de jeter un oeil à cet article pour une meilleure illustration de tête détachée état.