2009-05-20 12 views
188

Mam plik "main.cpp" otwarty w moim edytorze.git-checkout starsza wersja pliku pod nową nazwą

Chcę zobaczyć poprzednią wersję "main.cpp" również w edytorze.

Sposób w jaki teraz to robię jest taki.

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 

Czy można go uprościć, więc nie muszę zamykać "main.cpp" w edytorze?

Mam nadzieję, że jest to wariant z git-checkout, który może to zrobić.


UPDATE: im przy użyciu git na Mac OSX 10.5.7

prompt> git --version 
git version 1.6.0.4 
prompt> 

Update2: Jakub Narębski odpowiedź brzmi:

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

UPDATE3: Odpowiedź Karmi, w dla konkretnej wersji:

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

Jakiego edytora używasz? Być może ma wtyczkę/addon/moduł dodając obsługę Gita? –

+0

Używam textmate. Ma trochę wsparcia git, ale nie sprawdziłem, czy to potrafi. – neoneye

+0

TextMate ma git wiązkę: http://github.com/timcharper/git-tmbundle (powinno być sprawdzane na stronę InterfacesFrontendsAndTools git wiki: http://git.or.cz/gitwiki/) –

Odpowiedz

211

Można używać "git show" na to:

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

(Zauważ, że nie jest dwukropek ':' charakter między HEAD^ i main.cpp`.) W "<rewizji>: < ścieżka > "składnia jest opisana w git rev-parse podręcznika, obok ostatniego punktu w sekcji«Określanie wersjami»:

  • <obr>: < ścieżka > np Głowa: README: README Master: ./ README

    sufiks : następnie przez ścieżce BLOB lub drzew na danej ścieżce w drzewie obiektów ish wyznaczona przez część przed okrężnicy. :path (z pustą częścią przed dwukropkiem) to specjalny przypadek składni opisanej poniżej: zawartość zapisana w indeksie na podanej ścieżce.

    Ścieżka rozpoczynająca się od ./ lub ../ odnosi się do bieżącego katalogu roboczego. Podana ścieżka zostanie przekonwertowana względem katalogu głównego drzewa roboczego. Jest to najbardziej przydatne do adresowania obiektu typu blob lub drzewa z zatwierdzenia lub drzewa, które ma taką samą strukturę drzewa jak drzewo robocze.

Zauważ, że "< ścieżka >" tu jest PEŁEN ścieżka względem głównym katalogu swojego projektu, to katalog z .git/ katalogu. (Albo ściślej do „<rewizja>” (co w ogóle może być dowolny < drzewo-owski >, czyli coś, co reprezentuje drzewo))

Jeśli chcesz użyć ścieżki względnej do prądu katalogu, trzeba użyć „./ < ścieżka >«składnia (lub»../ < ścieżka >” iść w górę od bieżącego katalogu).

Edycja 15.01.2015: dodane informacje o składni ścieżki względnej


można dostać w większości przypadków taki sam efekt przy użyciu niskiego poziomu (hydraulika) git cat-file polecenie:

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

Jestem zainteresowany pełnym kopią, ale git-show pokazuje mi tylko różnice .. Próbowałem grać z opcją --pretty .. prompt> git show --pretty = fuller HEAD^main.cpp ale go to nie rozwiązało – neoneye

+4

"git show HEAD^main.cpp" (z odstępem między HEAD^a main.cpp) to różny od „git show-HEAD ^: main.cpp” (z _colon_ „:” pomiędzy głowicą i main.cpp ^).. –

+0

Hmm, z dwukropkiem widzę ten błąd, więc pomyślałem, że okrężnica była pomyłka Tak wydaje jak okrężnicy jest droga, ale w jaki sposób mogę rozwiązać ten prompt> git pokazać HEAD ^: main.cpp śmiertelne: niejednoznaczne argumentem „HEAD ^: main.cpp”: nieznany rewizja lub ścieżka nie t w drzewie roboczym. Użyj "-", aby oddzielić ścieżki od poprawek prompt> – neoneye

19

Wystarczy dodać do odpowiedzi Jakuba: nie musisz przekierowywać wyjścia do pliku z >, jeśli jesteś zainteresowany tylko przeglądaniem pliku zawartość w terminalu. Możesz po prostu uruchomić $ git show 58a3db6:path/to/your/file.txt.

+1

Myślę, że nie musisz zaczynać slash w tym poleceniu 'git show 58a3db6: path/to/your/file.txt' –

0

Polecenie git pokazać nie działa na mnie albo (za pomocą 1.6.4.msysgit). Może ma coś wspólnego z separatorem ścieżek systemu Windows?

skończyło się tylko pobieranie i używanie QGit .... o wiele łatwiejsze!

+1

Przełączyłem się na cygwin git ale byłem na msysgit przez chwilę i zauważyłem, że rzeczy takie jak' git Checkout HEAD^'nie działa, ponieważ'^'najwyraźniej ma jakieś specjalne znaczenie w typowej sesji cmd Windows. Ale 'git checkout" HEAD^"' działał więc może możesz zrobić coś takiego '' git cat-file blob "HEAD ^: main.cpp" 'w msysgit. – MatrixFrog

+1

'HEAD ^' jest po prostu aliasem dla 'HEAD ~ 1', ten drugi będzie działał z Windows. – Perleone

+0

Możesz użyć HEAD ~ ... bez potrzeby dla 1 – JoelFan

Powiązane problemy