Ver un archivo en una rama de Git diferente sin cambiar las ramas


620

¿Es posible abrir un archivo en una rama de git sin verificar esa rama? ¿Cómo?

Esencialmente quiero poder abrir un archivo en mi rama de páginas de Github sin cambiar de rama todo el tiempo. No quiero modificarlo, solo quiero verlo.


15
Todas las respuestas omitieron el hecho de que necesita especificar la ruta completa del archivo con git show: stackoverflow.com/questions/610208/… y stackoverflow.com/questions/2364147/…
VonC

15
En estos días, puede usar git show a1b35:./file.txtpara usar rutas relativas.
Steve Bennett

2
@VonC - gracias a Dios por la implementación del tabulador rama consciente :)
Lucas

más interesante podría estar mostrando diferenciasgit diff <other_branch> <path>
Sławomir Lenart

El ejemplo de archivo relativo anterior con "a1b35", ese es el nombre de la sucursal, así que, por supuesto, coloque allí su propio nombre de sucursal.
loneRanger

Respuestas:


877

Esto debería funcionar:

git show branch:file

Donde branch puede ser cualquier referencia (branch, tag, HEAD, ...) y file es la ruta completa del archivo. Para exportarlo puedes usar

git show branch:file > exported_file

También debe mirar las respuestas de VonC a algunas preguntas relacionadas:

ACTUALIZACIÓN 2015-01-19:

Hoy en día puedes usar rutas relativas con git show a1b35:./file.txt.


22
Y también puede abrir el archivo en vim: git show branch:file | vim -(Observe la barra "|" y el guión final después del comando vim:vim -
Greg Burghardt

3
@GregBurghardt lo que funciona para mí es algo similar avim -c "set syntax=html" -
raphaëλ

2
Desearía poder votar esta respuesta más de una vez, sinceramente.
Vincent Fourmond el

2
Esto SOLO muestra sucursales locales, NO muestra todas las sucursales en el servidor
William Entriken

3
@FullDecent, pude usar origin/my_remote_branchbien con esto. ¿O te refieres a la versión real del servidor? Si quieres eso, solo necesitas git fetchprimero.
rsmith54

53
git show somebranch:path/to/your/file

También puede hacer varios archivos y concatenarlos:

git show branchA~10:fileA branchB^^:fileB

No tiene que proporcionar la ruta completa al archivo, las rutas relativas son aceptables, por ejemplo:

git show branchA~10:../src/hello.c

Si desea obtener el archivo en el directorio local (revertir solo un archivo) puede pagar:

git checkout somebranch^^^ -- path/to/file

38

Una forma sencilla y novata de buscar un archivo: git gui browser <branch>que le permite explorar el contenido de cualquier archivo.

También está allí en el menú Archivo de git gui. La mayoría de los otros envoltorios GUI más avanzados (Qgit, Egit, etc.) también ofrecen navegación / apertura de archivos.


Este comando da como resultado "git: 'gui' no es un comando git. Vea 'git --help'. Soy un novato; ¿qué está pasando?
Scott Biggs

2
En realidad funciona (para mi sorpresa), vea git-scm.com/docs/git-gui - Uso git versión 2.5.2.windows.1
anhoppe

¡Esta respuesta fue muy útil! Gracias. Debería mencionar que estoy usando git bash en windows.
Fusión

¿Es posible usar Ranger como git gui?
acgtyrant

1
@ScottBiggs no eres un novato, estás utilizando una configuración no estándar.
Ashnur

20

Si está utilizando Emacs, puede escribir C-x v ~para ver una revisión diferente del archivo que está editando actualmente (etiquetas, ramas y hash, todo funciona).


¿Hay alguna manera de conseguir esto en Vim? (Estoy abierto a complementos).
NHDaly

4

Agregue lo siguiente a su ~/.gitconfigarchivo

[alias]
  cat = "!git show \"$1:$2\" #"

Y luego intenta esto

git cat BRANCHNAME FILEPATH

Personalmente prefiero parámetros separados sin dos puntos. ¿Por qué? Esta opción refleja los parámetros del checkoutcomando, que tiendo a usar con bastante frecuencia y, por lo tanto, me resulta mucho más fácil de recordar que el extraño parámetro separado por dos puntos del showcomando.


Eso es mucho más memorable, gracias.
Viajero
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.