Je suis récemment passé de SVN à Git et je suis un peu confus à propos de quelque chose. J'avais besoin d'exécuter la version précédente d'un script via un débogueur, donc j'ai fait git checkout <previous version hash>
et j'ai fait ce que je devais faire.
Maintenant, je veux revenir à la version la plus récente, mais je ne connais pas le hash correspondant. Quand je tape git log
, je ne le vois pas.
Comment puis-je faire ceci? En outre, existe-t-il un moyen plus facile de changer de version que de taper des hachages - quelque chose comme "revenir en arrière deux versions" ou "aller au plus récent chronologiquement"?
git checkout master
devrait faire l'affaire. Pour revenir en arrière sur deux versions, vous pouvez dire quelque chose comme git checkout HEAD~2
, mais il est préférable de créer une branche temporaire basée à ce moment-là, donc git checkout -b temp_branch HEAD~2
Lorsque vous utilisez un commit spécifique, git crée une branche détachée. Donc, si vous appelez:
$ git branch
Vous verrez quelque chose comme:
* (detached from 3i4j25)
master
other_branch
Pour revenir à la tête de la branche principale, il vous suffit de passer à la caisse de votre branche principale:
$ git checkout master
Cette commande supprimera automatiquement la branche détachée.
Si git checkout
ne fonctionne pas, vous avez probablement modifié les fichiers en conflit entre les branches. Pour vous empêcher de perdre du code, git vous oblige à traiter ces fichiers. Vous avez trois options:
Cachez vos modifications (vous pourrez les faire apparaître plus tard):
$ git stash
Annulez les modifications en réinitialisant la branche séparée:
$ git reset --hard
Créez une nouvelle branche avec les modifications précédentes et validez-les:
$ git checkout -b my_new_branch
$ git add my_file.ext
$ git commit -m "My cool msg"
Après cela vous pouvez revenir à votre branche principale (version la plus récente):
$ git checkout master
Cela a fait le tour pour moi (j'étais toujours sur la branche principale):
git reset --hard Origin/master
Vous pouvez vérifier en utilisant les noms de branches, d'une part.
Je sais qu'il y a plusieurs façons de déplacer le HEAD, mais je laisse le soin à un expert génial de les énumérer.
Je voulais juste suggérer gitk --all
- Je l’ai trouvé extrêmement utile lorsque je commence avec git.
Pour revenir à la dernière version:
git checkout <branch-name>
Par exemple, git checkout master
ou git checkout dev
Je commence tout juste à creuser plus profondément dans git, je ne suis donc pas sûr de bien comprendre, mais je pense que la bonne réponse à la question du PO est que vous pouvez exécuter git log --all
avec une spécification de format comme celle-ci: git log --all --pretty=format:'%h: %s %d'
. Ceci marque la version actuelle extraite comme (HEAD)
et vous pouvez simplement extraire la suivante de la liste.
En passant, ajoutez un alias comme celui-ci à votre .gitconfig
avec un format légèrement meilleur et vous pouvez exécuter git hist --all
:
hist = log --pretty=format:\"%h %ai | %s%d [%an]\" --graph
En ce qui concerne les versions relatives, j'ai trouvé ceci post , mais il ne parle que des versions plus anciennes, il n'y a probablement rien pour faire référence aux versions les plus récentes.
Certaines des réponses ici supposent que vous êtes sur une branche principale avant de décider de valider un commit plus ancien. Ce n'est pas toujours le cas.
git checkout -
Vous ramènera à la branche sur laquelle vous vous trouviez précédemment (peu importe si elle était maîtresse ou non).
Lorsque vous revenez à une version précédente,
$ git checkout HEAD~2
Previous HEAD position was 363a8d7... Fixed a bug #32
Vous pouvez voir votre journal des fonctionnalités (hash) avec cette commande même dans cette situation;
$ git log master --oneline -5
4b5f9c2 Fixed a bug #34
9820632 Fixed a bug #33
...
master
peut être remplacé par un autre nom de branche.
Ensuite, vérifiez-le, vous pourrez revenir à la fonctionnalité.
$ git checkout 4b5f9c2
HEAD is now at 4b5f9c2... Fixed a bug #34
Une solution plus élégante et simple consiste à utiliser
git stash
Il reviendra à la version locale la plus récente de la branche et enregistrera également vos modifications dans stash. Si vous souhaitez annuler cette action, procédez comme suit:
git stash apply