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.

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

Scolytus
fonte
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
Adam Dymitruk
fonte
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.

ingerir
fonte
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).

legoscia
fonte
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.

akuhn
fonte
Isso é muito mais memorável, obrigado.
Viajante