web-dev-qa-db-fra.com

Que faire avec un commit commis 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 pouvais m'engager quand j'étais dans un état isolé, je l'ai fait . Mais maintenant, je veux aimer fusionner ma branche détachée et ma branche maître locale, puis transmettre mes modifications à l'origine /maîtriser.

Ma question est donc de savoir comment puis-je fusionner la branche principale avec mon état actuel (tête détachée)

212
benzen

Créez une branche où vous êtes, puis passez à master et fusionnez-la:

git branch my-temporary-work
git checkout master
git merge my-temporary-work
362
Ryan Stewart

Vous pouvez faire quelque chose comme ça.

# 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 comporte le léger risque que, si vous commettez une erreur, il peut être un peu plus difficile de récupérer les erreurs commises sur la tête détachée.

75
CB Bailey

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 du HEAD actuel:

git branch brand-name

Ou juste un tag:

git tag tag-name
15
Arnaud Le Blanc

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 terminé, vous voulez le pousser vers la télécommande.

La première chose à faire est donc de donner un nom à ce detached HEAD. 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 n'importe quelle autre branche.

Dans mon cas, je voulais aussi avancer rapidement cette branche à maîtriser avec les commits que j'ai faits dans le detached HEAD (maintenant some-new-branch). Tout ce que j'ai fait é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 pour master

C'est à peu près ça.

12
Bhushan

Dans le cas où HEAD est détaché, les commits fonctionnent normalement, sauf qu'aucune branche nommée n'est mise à jour. Pour que la branche principale soit mise à jour avec vos modifications validées, créez une branche temporaire à votre emplacement le maître.

git branch  temp
git checkout master
git merge temp
5
Razan Paul

J'ai également fondé un article dans lequel il est expliqué comment traiter ... Je l'ajoute car il diffère un peu 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 étant la bonne

1
benzen

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

1
rookie

Une solution facile consiste simplement à créer une nouvelle branche pour cette validation et à la récupérer: git checkout -b <branch-name> <commit-hash>.

De cette manière, 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 d’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. Assurez-vous de consulter cet article pour une meilleure illustration de détaché HEAD state.

0
Nesha Zoric