Gibt es einen Befehl in Git, um zu sehen (entweder als Dump in stdout, oder in $PAGER
o $EDITOR
) eine bestimmte Version einer bestimmten Datei?
Sieht aus wie git log -pm
würde auch Merge Commits anzeigen.
Gibt es einen Befehl in Git, um zu sehen (entweder als Dump in stdout, oder in $PAGER
o $EDITOR
) eine bestimmte Version einer bestimmten Datei?
Zusätzlich zu Jim Hunziker die Antwort,
können Sie die Datei aus der Revision exportieren als,
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
Ich hoffe, das hilft :)
git log -p
zeigt Ihnen nicht nur die Commit-Protokolle, sondern auch den Diff jedes Commits (außer Merge-Commits). Dann können Sie auf /
, geben Sie den Dateinamen ein und drücken Sie enter
. Drücken Sie n
o p
um zum nächsten/vorherigen Vorkommen zu gelangen. Auf diese Weise sehen Sie nicht nur die Änderungen in der Datei, sondern auch die Übergabeinformationen.
WEG 1: (Ich bevorzuge diesen Weg, da so keine unbestätigten Daten verloren gehen können)
Finden Sie die Commit-ID mit: git reflog
Dateien aus der Übertragung auflisten git diff-tree --no-commit-id --name-only -r <commitHash>
Exemple :
git diff-tree --no-commit-id --name-only -r d2f9ba4
d2f9ba4
ist die Commit-ID aus Schritt 1.
Öffnen Sie die gewünschte Datei mit dem folgenden Befehl:
git show <commitHash>:/path/to/file
Exemple :
git show d2f9ba4:Src/Ext/MoreSwiftUI/ListCustom.swift
Src/...
ist der Dateipfad aus Schritt 2.
WEG 2: (Möglichkeit des Verlusts nicht gebundener Daten)
Finden Sie die Commit-ID mit: git reflog
Führen Sie einen Hard-Reset zu diesem Commit durch: git reset --hard %commit ID%
Exemple :
git reset --hard c14809fa
Nehmen Sie die erforderlichen Änderungen vor und führen Sie eine neue Übertragung in den gewünschten Zweig durch.
Sie können ein Skript wie dieses verwenden, um alle Versionen einer Datei in getrennten Dateien abzulegen:
z.B..
git_dump_all_versions_of_a_file.sh path/to/somefile.txt
Holen Sie sich die Skript hier als Antwort auf eine andere ähnliche Frage
Gut gefangen! Ich habe diese Antwort doppelt an 2 verschiedenen Stellen gepostet, und habe diese gerade entfernt und auf die andere verlinkt, wo mir die Leute vorher davon erzählt haben... Danke @mogsie!
Hilfsmittel zum Abrufen mehrerer Dateien aus einer bestimmten Revision
Bei der Lösung von Zusammenführungskonflikten ist dieses Hilfsmittel sehr nützlich:
#!/usr/bin/env python3
import argparse
import os
import subprocess
parser = argparse.ArgumentParser()
parser.add_argument('revision')
parser.add_argument('files', nargs='+')
args = parser.parse_args()
toplevel = subprocess.check_output(['git', 'rev-parse', '--show-toplevel']).rstrip().decode()
for path in args.files:
file_relative = os.path.relpath(os.path.abspath(path), toplevel)
base, ext = os.path.splitext(path)
new_path = base + '.old' + ext
with open(new_path, 'w') as f:
subprocess.call(['git', 'show', '{}:./{}'.format(args.revision, path)], stdout=f)
Verwendung:
git-show-save other-branch file1.c path/to/file2.cpp
Ergebnis: Im Folgenden finden Sie die alternativen Versionen der Dateien:
file1.old.c
path/to/file2.old.cpp
Auf diese Weise behalten Sie die Dateierweiterung bei, so dass Ihr Editor sich nicht beschweren wird und die alte Datei leicht neben der neuen Datei finden kann.
@MickeyPerlstein wenn Sie die gleiche Schnittstelle mit einer besseren Implementierung erreichen können, bin ich ganz Ohr.
Vielleicht verstehe ich es nicht (und falls ja, bitte ich um Entschuldigung), aber ist es nicht einfach: "git show version:./path > new_path"?
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
10 Stimmen
Wie erhält man eine Kopie einer älteren Version einer Datei in einem Git-Repository?
3 Stimmen
Wenn Sie zu dieser Frage gekommen sind, weil Sie eine ältere Version einer Binärdatei (z.B. eines Bildes) überprüfen wollen, dann ist es besser, einen Checkout in den alten Commit zu machen, zu sehen, was Sie sehen müssen, und dann zum HEAD zurückzukehren. Dazu machen Sie
git checkout <sha1-of-the-commit-you-need>
, danach,git checkout HEAD