Exibir um arquivo em uma ramificação Git diferente sem alterar ramificações


620

É possível abrir um arquivo em uma ramificação git sem fazer check-out dessa ramificação? Quão?

Essencialmente, eu quero poder abrir um arquivo na minha ramificação de páginas do github sem mudar de ramificação o tempo todo. Não quero modificá-lo, apenas quero visualizá-lo.


15
Todas as respostas perderam o fato de que você precisa especificar o caminho completo do arquivo com git show: stackoverflow.com/questions/610208/… e stackoverflow.com/questions/2364147/…
VonC

15
Hoje em dia, você pode usar git show a1b35:./file.txtpara usar caminhos relativos.
9788 Steve Bennett

2
@VonC - graças a Deus pela conclusão da guia com reconhecimento de ramificação :)
Luke

mais interessante poderia ser mostrando diferençasgit diff <other_branch> <path>
Sławomir Lenart

O exemplo de arquivo relativo acima com "a1b35", que é o nome do ramo - é claro, coloque seu nome no ramo.
loneRanger 9/03

Respostas:


876

Isso deve funcionar:

git show branch:file

Onde branch pode ser qualquer ref (branch, tag, HEAD, ...) e file é o caminho completo do arquivo. Para exportá-lo, você pode usar

git show branch:file > exported_file

Você também deve consultar as respostas do VonC para algumas perguntas relacionadas:

UPDATE 2015-01-19:

Atualmente você pode usar caminhos relativos com git show a1b35:./file.txt.


22
E você também pode abrir o arquivo no vim: git show branch:file | vim -(Observe o pipe "|" e o traço à direita após o comando vim:vim -
Greg Burghardt

3
@GregBurghardt o que funciona para mim é algo semelhante avim -c "set syntax=html" -
raphaëλ

2
Eu gostaria de poder votar esta resposta mais de uma vez, honestamente.
Vincent Fourmond

2
Isso mostra apenas ramos locais, ele não mostra todos os ramos no servidor
William Entriken

3
@ FullDecent, eu era capaz de usar origin/my_remote_branchbem com isso. Ou você quer dizer a versão real do servidor? Se você quer isso, você só precisa git fetchprimeiro.
rsmith54

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

você também pode criar vários arquivos e concatená-los:

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

Você não precisa fornecer o caminho completo para o arquivo; os caminhos relativos são aceitáveis, por exemplo:

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

Se você deseja obter o arquivo no diretório local (reverter apenas um arquivo), pode fazer o checkout:

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

38

Uma maneira simples e fácil para iniciantes de procurar em um arquivo: git gui browser <branch>que permite explorar o conteúdo de qualquer arquivo.

Também está lá no menu Arquivo de git gui. A maioria dos outros invólucros GUI (mais avançados) (Qgit, Egit, etc.) também oferece arquivos de navegação / abertura.


Este comando resulta em "git: 'gui' não é um comando git. Veja 'git --help'. Eu sou um novato; o que está acontecendo?
Scott Biggs

2
Ele realmente funciona (para minha surpresa), consulte git-scm.com/docs/git-gui - Eu uso a versão git 2.5.2.windows.1
anhoppe

Esta resposta foi muito útil! Obrigado. Deve mencionar que estou usando o git bash no Windows.
fusão

É possível usar o ranger como git gui?
acgtyrant

1
@ ScottBiggs você não é um novato, está usando uma configuração não padrão.
Ashnur

20

Se você estiver usando o Emacs, poderá digitar C-x v ~para ver uma revisão diferente do arquivo que está editando no momento (tags, ramificações e hashes funcionam).


Existe uma maneira de obter isso no Vim? (Estou aberto a plug-ins).
NHDaly 02/02

4

Adicione o seguinte ao seu ~/.gitconfigarquivo

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

E então tente isso

git cat BRANCHNAME FILEPATH

Pessoalmente, prefiro parâmetros separados sem dois pontos. Por quê? Essa escolha reflete os parâmetros do checkoutcomando, que costumo usar com frequência e, portanto, acho muito mais fácil lembrar do que o parâmetro bizarro do cólon do showcomando.


Isso é muito mais memorável, obrigado.
Viajante
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.