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?

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

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.