Mon ami et moi avons un repo qu'il a créé. Il a ensuite créé une branche appelée "lexer" sur laquelle nous travaillons.
Le problème est qu’il peut basculer entre maître et lexer mais que cela ne fonctionne pas du tout pour moi.
Finalement, je viens juste de recommencer (rm -rf repo
et ensuite cloné le référentiel) mais il est toujours impossible de vérifier la branche lexer?
Sur un repo fraîchement cloné:
git branch
donne:
$ git branch
* master
git checkout lexer
donne:
$ git checkout lexer
$ git status
On branch master
Your branch is up-to-date with 'Origin/master'.
Je peux payer Origin/lexer mais je me retrouve dans un état détaché HEAD?
$ git checkout Origin/lexer master
Note: checking out 'Origin/lexer'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
Il m'est possible de pousser vers la branche lexer en faisant
git Push Origin HEAD:lexer
mais bon, je voudrais vraiment régler ce gâchis. C'est tellement bizarre que ça marche pour lui mais pas pour moi? Il dit qu'il n'a pas non plus de changements locaux dans le dépôt git ...
Quelqu'un a un indice?
Je vais essayer de deviner que vous avez un répertoire nommé lexer
au niveau supérieur. Puisque git checkout
est utilisé à la fois pour changer de branche et pour réinitialiser les fichiers de l’arborescence, il détecte probablement que vous n’avez pas de branche appelée lexer
mais que vous avez un chemin et que vous sélectionnez le second mode . Cela fonctionne pour votre ami car il a déjà une branche lexer
.
La solution la plus simple consiste probablement à créer la branche en utilisant git branch
à la place.
git branch --track lexer Origin/lexer
devrait le faire pour vous. Vous pouvez ensuite utiliser git checkout
pour y accéder.
Une autre option pourrait être d'utiliser l'indicateur --
pour effectuer le paiement. Je n'ai pas essayé mais je pense que ça devrait marcher:
git checkout lexer --
Lorsque vous ajoutez --
, le mot qui le précède est toujours considéré comme une branche/commit/arbre et le mot après un chemin.
Vous ne pouvez pas extraire lexer
car vous n’avez pas la branche dans votre référentiel local (et sûrement un dossier du même nom). Vous n'avez que la branche distante 'Origin/lexer'. Vous devez d’abord créer la branche locale:
git checkout -b lexer Origin/lexer
Une bonne explication sur le sujet: https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches
Vous entrez dans un état HEAD détaché car Origin/lexer
est une branche de suivi à distance, et donc en lecture seule. Vous voulez simplement valider lexer
et faire votre travail à ce sujet. Ensuite, lorsque vous appuyez sur, Origin/lexer
sera mis à jour.
Edit : En relisant votre question, je constate que vous avez essayé de récupérer Lexer, mais que vous restez en mode maître. Il est étrange que git checkout
échoue silencieusement. Essayez git checkout -t Origin/lexer
.
Vous voulez probablement ceci:
git checkout -t Origin/lexer
De git manuel:
Par commodité, --track without -b implique la création de branches ...
et
-t, --track ... Lors de la création d'une nouvelle branche, configurez la configuration "en amont" ... Si aucune option -b n'est donnée, le nom de la nouvelle branche sera dérivé de la branche de suivi à distance.
Une autre supposition sauvage: vous rencontrez une étiquette avec un nom identique alors
git checkout lexer
vérifie réellement l'étiquette, pas la branche
Quand vous faites: git checkout Origin/lexer master
vous changez simplement votre HEAD
pour qu'il pointe vers le dernier commit dans notre branche remote
. C'est une branche en lecture seule.
Si vous souhaitez comprendre ce que HEAD lit ceci:
Comment déplacer HEAD vers un emplacement précédent? (Tête détachée)
Dans votre cas, vous devez simplement procéder comme suit:
# Update your local repository with all the remote branches
# --Prune = remove all deleted data locally which was removed on the remote
git fetch --all --Prune
Maintenant, vous devriez avoir les dernières branches localement.
!!! IMPORTANT:
Si vous avez apporté des modifications sans les pousser, ne supprimez pas la branche locale
git branch -D lexer
# don't use the remote simply the branch name
git checkout lexer
Maintenant, vous avez une branche locale avec le nom Lexer extrait de votre branche distante