344 votes

git-checkout ancienne révision d'un fichier sous un nouveau nom

J'ai le fichier "main.cpp" ouvrir dans mon éditeur.

Je veux voir la révision précédente de "main.cpp" dans l'éditeur de trop.

La façon dont je le fais maintenant, c'est comme ça.

close "main.cpp" in the editor

prompt> mv main.cpp tmp
prompt> git checkout HEAD^ main.cpp
prompt> mv main.cpp old_main.cpp
prompt> mv tmp main.cpp
prompt>

open "main.cpp" and "old_main.cpp" in the editor

Peut-il être simplifié, donc je n'ai pas à fermer "main.cpp" dans l'éditeur?

Ce que j'espère c'est une variante de l' git-checkout qui peut faire cela.


Mise à JOUR: im en utilisant git sous mac osx 10.5.7

prompt> git --version
git version 1.6.0.4
prompt> 

UPDATE2: Jakub Narębski réponse est:

prompt> git show HEAD^:dir1/dir2/dir3/main.cpp > old_main.cpp
prompt>

UPDATE3: Karmi réponse, pour une révision spécifique:

prompt> git show 4c274dd91dc:higgs/Higgs.xcodeproj/project.pbxproj > old_project.pbxproj
prompt> 

418voto

Jakub Narębski Points 87537

Vous pouvez utilisez "git show" pour que:

prompt> git show HEAD^:main.cpp > old_main.cpp

(Notez qu'il y a deux-points ':' caractère entre HEAD^ et main.cpp`.) Le "<revision>:*<chemin d'accès>*" la syntaxe est décrite dans git rev-parse man, l'avant-dernier point dans la "Spécification des révisions de la section":

  • Un suffixe ':' suivi par un chemin; c'noms de la goutte ou d'un arbre sur le chemin dans l'arbre-ish objet nommé par la partie avant la virgule.

Notez que "<chemin d'accès>" ici est PLEIN chemin relatif au répertoire racine de votre projet, c'est à dire le répertoire .git/ répertoire. (Ou, plus exactement, de "<revision>" (qui, en général, peut être n'importe quel <arbre-ish>, c'est à dire quelque chose qui représente l'arbre))


Vous pouvez obtenir dans la plupart des cas le même résultat à l'aide de bas niveau (plomberie) git cat-file commande:

prompt> git cat-file blob HEAD^:main.cpp > old_main.cpp

28voto

karmi Points 6213

Juste pour ajouter à la réponse de Jakub: vous n'avez même pas besoin de rediriger la sortie vers un fichier avec > , si vous ne souhaitez que survoler le contenu du fichier dans le terminal. Vous pouvez simplement exécuter $ git show 58a3db6:/path/to/your/file.txt .

0voto

nelsonmichael Points 41

La commande git show ne fonctionnait pas non plus pour moi (avec 1.6.4.msysgit). Peut-être quelque chose à voir avec le caractère séparateur de chemin Windows?

J'ai fini par télécharger et utiliser QGit .... beaucoup plus facile!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X