faire une poussée de git à partir d'une tête détachée

Je suis sur une tête détachée et j'ai fait quelques changements. Je veux pousser ces changements à cette tête détachée avec git. Je ne veux pas que mes modifications aillent sur la branche développer et certainement pas sur la branche master. Je travaille sur un dossier avec une autre personne.

Exemple de branches

   develop
   master
   *(HEAD detached at origin/49792_testMocha)

Comment puis-je pousser dans la tête sans affecter développer ou maîtriser?

30
demandé sur Winnemucca 2016-03-02 03:10:32

6 réponses

Créez une nouvelle branche en utilisant git checkout -b BRANCH_NAME

, Puis poussez la nouvelle branche à distance: git push origin BRANCH_NAME

28
répondu J. Titus 2016-03-02 00:12:11

Si vous êtes sur une tête détachée et que vous voulez pousser vers votre branche distante

git push origin HEAD:name-of-your-branch

Sinon, vous pouvez créer une nouvelle branche et la pousser ( elle sera créée automatiquement)

git branch new-branch-name
git push -u origin new-branch-name
75
répondu Mohamed Salem Lamiri 2017-05-14 21:57:07

Alors que toutes les réponses ici répondent en quelque sorte à la question initiale (comment pousser d'une tête détachée sans affecter les autres branches), toutes les bar none suggèrent de créer une nouvelle branche, mais aucune, y compris la réponse votée vous indique comment pousser vers une nouvelle branche distante Sans Créer une nouvelle branche locale.

Je vous donne:

git checkout --detach # (or anything else that leaves you with a detached HEAD - guillotine anyone?)
[change stuff & commit]
git push origin HEAD:refs/heads/new-branch-name

Tada!

2
répondu Matt 2018-09-14 20:14:51

git checkout

git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back

Cela va extraire une nouvelle branche pointant vers le commit souhaité.
Cette commande va extraire un commit donné.
À ce stade, vous pouvez créer une branche et commencer à travailler à partir de ce point.

# Checkout a given commit. 
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
#in order to be able to update the code.
git checkout <commit-id>

# create a new branch forked to the given commit
git checkout -b <branch name>
1
répondu CodeWizard 2016-03-02 06:32:19

Note: faire une branche avant pousser est d'autant plus recommandé que git 2.11 ou moins utilisé pour segfault!

Ce ne sera pas le cas avec Git 2.12+ (T1 2017)

Voir commettre b10731f (07 Janv 2017) par Kyle Meyer (kyleam).
(Fusionné par Junio C Hamano -- gitster -- dans commettre b85f79c, 18 janvier 2017)

branch_get_push: Ne pas segfault lorsque la tête est détachée

"git <cmd> @{push}" sur une tête détachée utilisée d'erreur de segmentation; il a correction de l'erreur avec un message.

L'erreur sera maintenant:

HEAD does not point to a branch

Avec Git 2.12 ou plus, vous pouvez ensuite pousser votre tête détachée vers une branche distante, comme indiqué dans la réponse deMatt .

1
répondu VonC 2018-09-28 13:35:44

Créez une nouvelle branche pour cette validation et extrayez-la: git checkout -b <branch-name> <commit-hash>. Maintenant, vous pouvez pousser vos modifications à la nouvelle branche: git push origin <branch-name>

Au cas où vous auriez besoin de nettoyer votre autre branche des commits restants, assurez-vous de lancer git reset --hard <branch-name>.

Voici un article qui explique comment fonctionne branchement et tête détachée .

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