tag - ¿qué herramienta podemos hacer para tener un mayor control de nuestros proyecto en github?
git-checkout revisión anterior de un archivo con un nuevo nombre (2)
Tengo el archivo " main.cpp
" abierto en mi editor.
Quiero ver la revisión anterior de " main.cpp
" en el editor también.
La forma en que lo hago ahora es así.
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
¿Se puede simplificar, por lo que no tengo que cerrar "main.cpp" en el editor?
Lo que espero es una variante de git-checkout
que pueda hacer esto.
ACTUALIZACIÓN: estoy usando git en mac osx 10.5.7
prompt> git --version
git version 1.6.0.4
prompt>
ACTUALIZACIÓN2: La respuesta de Jakub Narębski es:
prompt> git show HEAD^:dir1/dir2/dir3/main.cpp > old_main.cpp
prompt>
ACTUALIZACIÓN 3: La respuesta de Karmi, para una revisión específica:
prompt> git show 4c274dd91dc:higgs/Higgs.xcodeproj/project.pbxproj > old_project.pbxproj
prompt>
Puedes usar "git show" para eso:
prompt> git show HEAD^:main.cpp > old_main.cpp
(Tenga en cuenta que hay un carácter de dos puntos [ :
] entre HEAD^
y main.cpp
). La sintaxis <revision>:<path>
se describe en la página de manual de git rev-parse , junto al último punto en la sección "Especificación de revisiones":
- <rev>: <ruta>, por ejemplo, HEAD: README,: README, master: ./ README
Un sufijo
:
seguido de una ruta nombra el blob o el árbol en la ruta dada en el objeto tree-ish nombrado por la parte antes de los dos puntos.:path
(con una parte vacía antes de los dos puntos) es un caso especial de la sintaxis que se describe a continuación: contenido registrado en el índice en la ruta dada.Una ruta que comienza con
./
o ..../
es relativa al directorio de trabajo actual. La ruta dada se convertirá para que sea relativa al directorio raíz del árbol de trabajo. Esto es muy útil para tratar un blob o árbol desde un commit o árbol que tiene la misma estructura de árbol que el árbol de trabajo.
Tenga en cuenta que <path>
aquí es la ruta COMPLETA relativa al directorio superior de su proyecto, es decir, el directorio con el directorio .git/
. (O para ser más exacto con " <revision> " (que en general puede ser cualquier <tree-ish> , es decir, algo que represente un árbol))
Si desea usar la ruta relativa al directorio actual, necesita usar la sintaxis ./<path>
(o ../path
para subir desde el directorio actual).
Edición 2015-01-15: se agregó información sobre la sintaxis de la ruta relativa
En la mayoría de los casos, puede obtener la misma salida usando el comando git cat-file
bajo nivel (plomería):
prompt> git cat-file blob HEAD^:main.cpp > old_main.cpp
Solo para agregar a la respuesta de Jakub: ni siquiera tiene que redirigir la salida a un archivo con >
, si solo está interesado en examinar el contenido del archivo en el terminal. Simplemente puede ejecutar $ git show 58a3db6:path/to/your/file.txt
.