Zeigen Sie eine Datei in einem anderen Git-Zweig an, ohne die Zweige zu ändern

620

Ist es möglich, eine Datei in einem Git-Zweig zu öffnen, ohne diesen Zweig auszuchecken? Wie?

Im Wesentlichen möchte ich in der Lage sein, eine Datei in meinem Github- Seitenzweig zu öffnen, ohne ständig den Zweig zu wechseln. Ich möchte es nicht ändern, sondern nur anzeigen.

Schneems
quelle
15
Bei allen Antworten wurde die Tatsache übersehen, dass Sie den vollständigen Pfad der Datei angeben müssen mit git show: stackoverflow.com/questions/610208/… und stackoverflow.com/questions/2364147/…
VonC
15
Heutzutage können Sie git show a1b35:./file.txtrelative Pfade verwenden.
Steve Bennett
2
@VonC - Gott sei Dank für die verzweigungsbewusste Tab-Vervollständigung :)
Luke
interessanter könnte sein, Unterschiede zu zeigengit diff <other_branch> <path>
Sławomir Lenart
Das obige relative Dateibeispiel mit "a1b35", das ist der Filialname - also geben Sie dort natürlich Ihren eigenen Filialnamen ein.
LoneRanger

Antworten:

876

Das sollte funktionieren:

git show branch:file

Dabei kann der Zweig eine beliebige Referenz sein (Zweig, Tag, HEAD, ...) und die Datei ist der vollständige Pfad der Datei. Zum Exportieren können Sie verwenden

git show branch:file > exported_file

Sie sollten sich auch die Antworten von VonC auf einige verwandte Fragen ansehen :

UPDATE 19.01.2015:

Heutzutage können Sie relative Pfade mit verwenden git show a1b35:./file.txt.

Scolytus
quelle
22
Und Sie können die Datei auch in vim öffnen: git show branch:file | vim -(Beachten Sie die "|" - Pipe und den nachgestellten Bindestrich nach dem vim-Befehl:vim -
Greg Burghardt
3
@ GregBurghardt, was für mich funktioniert, ist etwas ähnliches wievim -c "set syntax=html" -
Raphaëλ
2
Ich wünschte, ich könnte diese Antwort mehr als einmal positiv bewerten.
Vincent Fourmond
2
Dies zeigt nur lokale Zweige, es zeigt NICHT alle Zweige auf dem Server
William Entriken
3
@FullDecent, ich konnte gut damit umgehen origin/my_remote_branch. Oder meinst du die eigentliche Serverversion? Wenn Sie das wollen, müssen Sie nur git fetchzuerst.
rsmith54
53
git show somebranch:path/to/your/file

Sie können auch mehrere Dateien erstellen und verketten lassen:

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

Sie müssen nicht den vollständigen Pfad zur Datei angeben. Relative Pfade sind zulässig, z.

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

Wenn Sie die Datei im lokalen Verzeichnis abrufen möchten (nur eine Datei zurücksetzen), können Sie Folgendes auschecken:

git checkout somebranch^^^ -- path/to/file
Adam Dymitruk
quelle
38

Eine einfache, für Anfänger geeignete Methode zum Durchsuchen einer Datei, mit git gui browser <branch>der Sie den Inhalt jeder Datei untersuchen können.

Es ist auch dort im Menü Datei von git gui. Die meisten anderen - fortgeschritteneren - GUI-Wrapper (Qgit, Egit usw.) bieten auch das Durchsuchen / Öffnen von Dateien an.

Inger
quelle
Dieser Befehl führt zu "git: 'gui' ist kein git-Befehl. Siehe 'git --help'. Ich bin ein Neuling; was ist los?
Scott Biggs
2
Es funktioniert tatsächlich (zu meiner Überraschung), siehe git-scm.com/docs/git-gui - Ich verwende git Version 2.5.2.windows.1
anhoppe
Diese Antwort war sehr hilfreich! Vielen Dank. Sollte erwähnen, dass ich Git Bash unter Windows verwende.
Fusion
Ist es möglich, Ranger als Git Gui zu verwenden?
Acgtyrant
1
@ScottBiggs Sie sind kein Neuling, Sie verwenden ein nicht standardmäßiges Setup.
Ashnur
20

Wenn Sie Emacs verwenden, können Sie eingeben, C-x v ~um eine andere Revision der Datei anzuzeigen, die Sie gerade bearbeiten (Tags, Zweige und Hashes funktionieren alle).

Legoscia
quelle
Gibt es eine Möglichkeit, dies in Vim zu erreichen? (Ich bin offen für Plug-Ins.)
NHDaly
4

Fügen Sie Ihrer ~/.gitconfigDatei Folgendes hinzu

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

Und dann versuchen Sie es

git cat BRANCHNAME FILEPATH

Persönlich bevorzuge ich separate Parameter ohne Doppelpunkt. Warum? Diese Auswahl spiegelt die Parameter des checkoutBefehls wider , die ich häufig verwende, und ich finde es daher viel einfacher, sich daran zu erinnern, als an den bizarren Doppelpunkt-getrennten Parameter des showBefehls.

akuhn
quelle
Das ist so viel unvergesslicher, danke.
Reisender