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)

191
demandé sur benzen 2011-08-19 20:17:16

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
324
répondu Ryan Stewart 2011-08-19 16:19:56

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.

68
répondu CB Bailey 2011-08-19 16:22:07

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
13
répondu arnaud576875 2011-08-19 16:20:02

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.

9
répondu Bhushan 2015-10-21 21:59:13

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
4
répondu Razan Paul 2016-10-30 22:51:33

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

1
répondu benzen 2011-08-19 16:31:36

peut-être pas la meilleure solution, (réécrira l'histoire) mais vous pourriez aussi faire git reset --hard <hash of detached head commit> .

1
répondu rookie 2016-05-24 19:51:38

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.

0
répondu Nesha Zoric 2018-05-07 12:42:05