So stellen Sie einen Ordner auf ein bestimmtes Commit zurück, indem Sie einen Patch erstellen

97

Hier ist mein Verlauf für den Ordner 'somefolder'

$ git log somefolder

commit 89cd
More changes to somefolder

commit ef47a
Updating somefolder and other stuff

commit e095
Bugs fixed in somefolder

Ich möchte einen Ordner wieder auf das Commit "Fehler in einem Ordner behoben" zurücksetzen.

Da das zweite Festschreiben Änderungen außerhalb eines Ordners beinhaltete, möchte ich dieses Festschreiben nicht zurücksetzen.

Ich denke, der sicherste Weg wäre, ein Diff / Patch zwischen Commit e095 und 89cd zu erstellen, das nur für einen Ordner gilt, und dann diesen Patch anzuwenden. Wie kann ich das machen?

Hitfactory
quelle

Antworten:

155

Mit git checkout können Sie Ihr Repository auf einen bestimmten Status aktualisieren.

git checkout e095 -- somefolder

Was Ihre Frage zum Generieren des Diff betrifft, würde dies auch funktionieren. Generieren Sie einfach das Diff, um von Ihrem aktuellen Status zurück zu e095:

git diff 89cd..e095 -- somefolder
Jamessan
quelle
30
Dadurch werden keine Dateien entfernt, die in diesem Commit hinzugefügt wurden. Verwenden Sie git reset e095 -- some/folderstattdessen
shime
2
Von 2.22 git können Sie verwenden --no-overlayfür git checkoutso dass nachverfolgt Dateien , die nicht in begehen aus Sie auschecken werden entfernt.
Mariusz Pawelski
53

Sie können git resetden Index zurücksetzen, der auch das Entfernen von Dateien umfasst, die in neueren Commits hinzugefügt wurden ( git checkoutdies allein tut dies nicht):

git reset e095 -- somefolder

Die git resetArbeitskopie wird jedoch nicht aktualisiert, und die --hardOption funktioniert nicht mit Ordnern. Verwenden Sie dann git checkout, um die Arbeitskopie mit dem Index identisch zu machen:

git checkout -- somefolder

und wenn Sie dann auch alle hinzugefügten Dateien entfernen möchten, müssen Sie auch Folgendes tun:

git clean -fd somefolder
Matthew Buckett
quelle
Diese Antwort funktioniert für mich, wenn das Verzeichnis neue Dateien enthält.
Yahoho
2
Diese Antwort ist viel besser, wenn Sie zu diesem Zeitpunkt wirklich einen sauberen Snapshot des Repositorys wünschen.
Daten Prinzessin
Viel viel besser!
Alexis Pautrot