Si je consulte une version balisée de mon code source sans créer de branche, Git indique que je ne suis associé à aucune branche. Je suis heureux de me laisser faire des changements et de les vérifier. Où vont ces changements? Si je reviens à 'master' ils disparaissent (écrasés par ce qui était en master) et je n'arrive pas à les retrouver. Ce qui donne? Si Git me laisse commettre des changements contre une branche essentiellement anonyme, je peux sûrement les récupérer?Git commettre contre tag sans branche
Répondre
Parce que votre Commit est pas sur une branche, vous ne pouvez pas le voir dans le répertoire de travail, sauf si vous passez commande commit spécifique , en utilisant son SHA1. Vous pouvez trouver le commit en regardant le reflog
qui suit les changements dans ce que vous avez extrait du repo. Si votre balise était XXX
vous verrez quelque chose comme:
$ git reflog
7a30fd7... [email protected]{0}: checkout: moving from master to XXX
ddf751d... [email protected]{1}: checkout: moving from 96c3b0300ccf16b64efc260c21c85ba9030f2e3a to master
96c3b03... [email protected]{2}: commit: example commit on tag XXX, not on any branch
7a30fd7... [email protected]{3}: checkout: moving from master to XXX
qui vous indique la SHA1 que vous auriez à checkout
afin de voir votre commettras dans le répertoire de travail.
$ git checkout 96c3b03
Note: moving to "96c3b03" which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
git checkout -b <new_branch_name>
HEAD is now at 96c3b03... example commit on tag XXX, not on any branch
$ git checkout -b newbranch
$ git branch #lists all branches
feature1
master
* newbranch
Tout cela me semblait un peu bizarre au début, jusqu'à ce que je compris que checkout
git place tous les fichiers du projet que d'un particulier commettras dans mon système de fichiers (répertoire de travail). En effet, le répertoire de travail agit comme un navigateur sur le référentiel Git local. Ainsi, vos modifications n'ont pas été remplacées dans le référentiel, elles n'apparaissent tout simplement pas dans votre répertoire de travail lorsque vous avez extrait le fichier maître.
Oui, ils seront dans les reflogs.
Vous pouvez nommer la branche à tout moment comme celui-ci:
git checkout -b my-branch-name
Pour répondre à la deuxième question que vous souhaitez utiliser git reset --hard yourtagname
Quant à ce qui vous arrive essentiellement fourchue votre branche au tagname et est resté sur la même branche. Vos engagements dans la vieille fourchette sont toujours là ... ils sont juste difficiles à voir. Vous devrez peut-être utiliser le reflog pour trouver la vieille fourchette.
Vous pouvez fusionner le commettras dans master sans une nouvelle branche en trouvant son SHA1 (en utilisant reflog git comme ci-dessus), puis:
git checkout master
git merge SHA1
- 1. Comment commettre un tag git?
- 2. git: Changer de branche et ignorer les modifications sans valider
- 3. Git: patcher une autre branche
- 4. Commettre parties spécifiques d'un fichier dans Git
- 5. Expérience de branche Git
- 6. git: branche de commutation sans tête de détachement
- 7. MVC Routage contre Autorisation/Authorize Tag
- 8. Git - Changement de branche (windows) & changement non-associé
- 9. erreur Git fatale lors branche de commutation
- 10. Supprimer une branche git mal nommée
- 11. Importer une branche svn dans git
- 12. Git: renommer un répertoire dans une branche
- 13. Changer de nom de branche en git
- 14. Afficher uniquement la branche actuelle dans Git
- 15. git-svn: comment copier les commit git d'une branche SVN à une autre?
- 16. Git: réinitialiser l'autre branche au courant sans passer à la caisse
- 17. Lire un dépôt Git, sans Git
- 18. git-svn: revenir un engagement d'un pas maître branche
- 19. git sans dossier .git - un git-dir distant
- 20. Résolution de git repo avec la branche principale et un deuxième nom de branche MASTER
- 21. git - mise à jour à la nouvelle branche des rails
- 22. Suivi d'une branche distante/p4/master dans git
- 23. comment puis-je tirer une branche de suivi à distance alors que dans la branche maître
- 24. Commettre des binaires sur SVN
- 25. svn: Comment automatiser commettre le transfert entre les branches
- 26. Git sur ssh sans Git être installé sur le serveur
- 27. Comment afficher les objets git et l'index sans utiliser git
- 28. Prenez toutes mes modifications sur la branche actuelle et déplacez-les vers une nouvelle branche dans Git
- 29. git checkout et fusionner sans toucher l'arbre de travail
- 30. Git travaillant avec des correctifs
Note à moi: Ensuite, faites 'git checkout master', 'git merge newbranch',' git branche -d newbranch' et 'git push'. – Znarkus
Ou encore plus simple sans créer de branche: 'git checkout master' puis' git merge 96c3b03' (remplacez par SHA1 correct trouvé par 'git reflog') (comme solution par [gjvis bellow] (http://stackoverflow.com/a/8760749/535203)) –