web-dev-qa-db-fra.com

Pourquoi Git me dit "Pas actuellement sur une branche" après avoir exécuté "git checkout Origin / <branch>"?

J'essayais de suivre les instructions de Git: "Pas actuellement sur une branche." Existe-t-il un moyen facile de revenir sur une branche, tout en conservant les modifications? mais git checkout semble rompu:

$ git checkout Origin/web-zach
HEAD is now at 1366cb1... Changed so css files not ignored

$ git status
# Not currently on any branch.
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .cordova/config.xml
#       www/languages/pt/sounds/
nothing added to commit but untracked files present (use "git add" to track)

Plus précisément, je suis préoccupé par le message "Pas actuellement sur une branche". git checkout ne semble rien faire ici ... Le but de cette commande n'est-il pas de me mettre sur une branche? Comment puis-je revenir sur une branche et valider/pousser à nouveau?

18
hubatish

La sortie de git status indique que votre répertoire de travail est propre; bien.

Maintenant, en exécutant

git checkout Origin/web-zach

vous essayez de vérifier une branche suivi à distance, appelée Origin/web-zach; il s'agit d'un type spécial de branche, local à votre référentiel, qui conserve la trace de la branche correspondante, web-zach, vivant dans le référentiel distant appelé Origin.

Cependant, la référence HEAD (que vous pouvez considérer comme un marqueur vous êtes ici sur une carte) ne peut pas pointer vers une branche de suivi à distance ; uniquement à une branche locale "normale", ou à un commit directement. Lorsque vous essayez d'extraire une branche de suivi à distance, la référence HEAD finit par pointer directement à la astuce de la branche de suivi à distance (c'est-à-dire la commit auquel cette branche de suivi à distance pointe):

enter image description here

Lorsque HEAD ne pointe pas vers une branche locale "normale", mais pointe vers une validation directement, vous vous retrouvez dans ce qu'on appelle "l'état détaché-HEAD". Ce n'est pas la fin du monde, mais éviter autant que possible d'atterrir dans cet état (au moins au début de votre apprentissage Git) vous épargnera probablement quelques surprises.

Pour remédier à la situation, vous devez rattacher HEAD à une branche locale. Ici, vous voudrez peut-être créer et extraire une telle branche locale, en exécutant, par exemple

git checkout -b web-zach

HEAD pointera alors vers la branche locale nouvellement créée appelée web-zach:

enter image description here

Ensuite, vous devriez

$ git status
On branch web-zach
Untracked files:
  (use "git add <file>..." to include in what will be committed)
      .cordova/config.xml
      www/languages/pt/sounds/
nothing added to commit but untracked files present (use "git add" to track)

Après cela, vous serez libre de faire des modifications, de les mettre en scène, de valider et (si vous avez un accès en écriture au référentiel distant correspondant à Origin et que personne d'autre n'a rien poussé vers Origin/web-zach depuis votre dernier git fetch), Push, utilisation

git Push -u Origin web-zach
42
jub0bs