Git push maître fatale: Vous n'êtes pas actuellement sur une branche

Maître est-il à say commit # 10. Cependant, j'ai fini par réaliser que j'ai cassé quelque chose en cours de route qui n'a pas été attrapé par des tests.

J'ai fini par commettre #5, puis lentement refait le dev de chaque commit et l'ajustait continuellement pour s'assurer qu'il ne provoquait pas le bug. Maintenant, je suis essentiellement de retour à commit # 10, mais avec un certain nombre de changements qui empêchent le bug de se produire.

Je veux maintenant créer commit # 11 en utilisant mes modifications. Mais quand j'essaie de pousser à maîtriser je reçois

fatal: You are not currently on a branch.
To push the history leading to the current (detached HEAD)
state now, use

    git push master HEAD:<name-of-remote-branch>

Ce qui est à prévoir. Mais comment puis-je réellement faire en sorte que cela pousse vers ma branche distante?

J'ai essayé git push origin HEAD:master, mais a donné ceci:

! [rejected]        HEAD -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/tomhammond/sample.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and integrate the remote changes
hint: (e.g. 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

, Quand je fais un git status je vois HEAD detached from 4a74ac3

32
demandé sur Tom Hammond 2015-05-27 04:16:49

2 réponses

Mais quand j'essaie de pousser à maîtriser je reçois

fatal: You are not currently on a branch. To push the history leading to the current (detached HEAD)

Ce qui est à prévoir

Travailler dans un état détaché est Pas à attendre, sauf si vous voulez délibérément faire cela, ce qui, je doute, est le cas pour vous. Au lieu de vérifier commit #5, vous devriez avoir soit retourné la branche master à ce commit, ou faire un git rebase en mode interactif où vous pouvez ressasser les commits comme vous le souhaitez.

Cela étant dit, si vous êtes certain que la version de master dans l'état détaché est ce que vous voulez vraiment garder , alors vous pouvez contourner l'erreur non-fast-forward, en poussant la branche vers la télécommande:

git push origin HEAD:master --force

Cependant, si vous forcez push vous courez le risque de causer des problèmes pour tous les autres utilisateurs qui ont cette branche extraite. Une solution moins risquée serait de créer une branche temporaire à partir de la tête détachée, puis de fusionner cette branche en master:

git branch temp-branch
git checkout master
git merge temp-branch
git push origin master
49
répondu Tim Biegeleisen 2015-05-27 01:30:40

git push ne vous permettra que de faire avancer rapidement la télécommande. Cela signifie que le commit que vous essayez de pousser doit être un descendant de la branche distante. Puisque vous avez édité les commits précédents après 5, vous n'avez pas de descendant mais plus de cousin. Vous pouvez donner git push --force si vous voulez écraser la branche, mais si d'autres personnes ont fait leurs propres modifications au-dessus du maître actuel, elles ne pourront plus tirer la branche. En outre, si quelqu'un d'autre pousse à maîtriser avant de le faire, leurs changements seront être perdu. Généralement, vous ne voulez pas forcer push si vous n'êtes pas le seul à utiliser une branche.

1
répondu singron 2015-05-27 01:25:05