usar - git-checkout revisão mais antiga de um arquivo sob um novo nome




tortoise git (2)

Eu tenho o arquivo " main.cpp " aberto no meu editor.

Eu quero ver a revisão anterior do " main.cpp " no editor também.

O jeito que eu faço agora é assim.

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

Pode ser simplificado, então eu não tenho que fechar "main.cpp" no editor?

O que eu espero é uma variante do git-checkout que possa fazer isso.

UPDATE: estou usando git no mac osx 10.5.7

prompt> git --version
git version 1.6.0.4
prompt> 

UPDATE2: Resposta de Jakub Narębski é:

prompt> git show HEAD^:dir1/dir2/dir3/main.cpp > old_main.cpp
prompt>

UPDATE3: resposta de Karmi, para uma revisão específica:

prompt> git show 4c274dd91dc:higgs/Higgs.xcodeproj/project.pbxproj > old_project.pbxproj
prompt> 

Apenas para adicionar a resposta de Jakub: você não precisa nem redirecionar a saída para um arquivo com > , se você estiver interessado apenas em skimming o conteúdo do arquivo no terminal. Você pode simplesmente executar $ git show 58a3db6:path/to/your/file.txt .


Você pode usar o "git show" para isso:

prompt> git show HEAD^:main.cpp > old_main.cpp

(Observe que há um caractere de cólon [ : ] entre HEAD^ e main.cpp .) A sintaxe <revision>:<path> é descrita em git rev-parse manpage, ao lado do último ponto na seção "Especificando revisões":

  • <rev>: <caminho>, por exemplo, HEAD: README,: README, master: ./ README

    Um sufixo : seguido por um caminho, nomeia o blob ou árvore no caminho determinado no objeto tree-ish nomeado pela parte antes dos dois-pontos. :path (com uma parte vazia antes dos dois pontos) é um caso especial da sintaxe descrita a seguir: conteúdo gravado no índice no caminho dado.

    Um caminho que começa com ./ ou ../ é relativo ao diretório de trabalho atual. O caminho fornecido será convertido para ser relativo ao diretório-raiz da árvore de trabalho. Isso é mais útil para endereçar um blob ou árvore de um commit ou árvore que tenha a mesma estrutura de árvore que a árvore de trabalho.

Note que <path> aqui é o caminho FULL relativo ao diretório principal do seu projeto, isto é, o diretório com o diretório .git/ . (Ou para ser mais exato para " <revision> " (que em geral pode ser qualquer <tree-ish> , isto é, algo que represente árvore))

Se você quiser usar o caminho relativo ao diretório atual, será necessário usar a sintaxe ./<path> (ou ../path para ir do diretório atual).

Editar 2015-01-15: informações adicionadas sobre a sintaxe do caminho relativo

Você pode obter na maioria dos casos a mesma saída usando o comando git cat-file baixo nível (encanamento):

prompt> git cat-file blob HEAD^:main.cpp > old_main.cpp




git