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.

Schneems
fuente
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.

Escolito
fuente
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
Adam Dymitruk
fuente
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.

inger
fuente
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).

legoscia
fuente
¿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.

akuhn
fuente
Eso es mucho más memorable, gracias.
Viajero