Ich habe ein altes Commit, das ich vor ein paar Wochen gemacht habe. Ich möchte nur eine einzige Datei aus diesem Commit wiederherstellen. Was mache ich?
Ich habe ein altes Commit, das ich vor ein paar Wochen gemacht habe. Ich möchte nur eine einzige Datei aus diesem Commit wiederherstellen. Was mache ich?
Antworten:
git checkout 'master@{7 days ago}' -- path/to/file.txt
Dadurch wird HEAD nicht geändert, sondern nur die lokale Datei überschrieben path/to/file.txt
Siehe man git-rev-parse für mögliche Revisionsspezifikationen dort (natürlich wird ein einfacher Hash (wie dd9bacb
) gut tun)
Vergessen Sie nicht, die Änderung zu übernehmen (nach einer Überprüfung ...)
revision-specification
da das, was das OP gefragt hat :)
shacommit~1
(Beispiel :) git checkout 0f4bbdcd~1 -- path/to/file.txt
, um das Commit unmittelbar zuvor abzurufen.
git checkout [Revision_Key] -- path/to/file
.git checkout
kann einzelne Dateien verarbeiten (siehe Antwort von sehe), kein Kopieren und Einfügen erforderlich.
HEAD
, ORIG_HEAD
oder irgendwelche von denen in Kombination mit ^
/ ~
/ @
-Stil Notation.
Ich musste eine kürzlich in git festgeschriebene Datei wiederherstellen. Um dies zu wiederholen und eine andere Perspektive zu geben, müssen Sie dazu die folgenden zwei Schritte ausführen:
git log -3
Hier werden die drei letzten Commits angezeigt. Lesen Sie die Kommentare und den Namen des Autors, damit Sie die gewünschte Version eingrenzen können. Notieren Sie sich diese lange Festschreibungs-ID (dh b6b94f2c19c456336d60b9409fb1e373036d3d71) für die gewünschte Festschreibungsversion.
git checkout b6b94f2c19c456336d60b9409fb1e373036d3d71 - myfile.java Übergeben Sie
die Commit-ID UND den Dateinamen, den Sie wiederherstellen möchten. Stellen Sie sicher, dass vor und nach dem doppelten Bindestrich ein Leerzeichen steht.
Es gibt viele andere Möglichkeiten, dies zu tun. Aber dieser ist der einfachere, an den ich mich erinnern kann. Hoffentlich hilft das.
HINWEIS: Wenn Sie sich in Ihrem Projektpfad / -ordner befinden, müssen Sie den Pfad der vollständigen Datei nicht in den Befehl checkout eingeben.
Alle Antworten erwähnen git checkout <tree-ish> -- <pathspec>
. Ab git v2.23.0 gibt es eine neue git-Wiederherstellungsmethode , die einen Teil dessen übernehmen soll, wofür git checkout
verantwortlich war. Die Höhepunkte der Änderungen finden Sie im Github-Blog .
Das Standardverhalten dieses Befehls besteht darin, den Status eines Arbeitsbaums mit dem Inhalt wiederherzustellen, der aus dem source
Parameter stammt (in Ihrem Fall handelt es sich um einen Commit-Hash).
Angenommen, der Commit-Hash ist, würde abcdef
der Befehl folgendermaßen aussehen:
git restore --source=abcdef file_name
was es (standardmäßig) in den Arbeitsbaum setzt. Wenn Sie die Änderung direkt in den Index aufnehmen möchten, damit sie sofort festgeschrieben werden kann:
git restore --source=abcdef --worktree --staged file_name
oder mit kurzen Optionsnamen:
git restore -s=abcdef -W -S file_name