2015-11-12 14 views
16

Normalerweise erstellt der Befehl git revert automatisch einige Commits mit Commit-Protokollnachrichten, die angeben, welche Commits zurückgesetzt wurden.git revert --no-commit ohne Bereitstellung

Um eine automatische Festschreibung zu vermeiden, gibt es die Option -n (oder --no-commit).

Aber nach diesem Befehl befinden sich die wiederhergestellten Dateien im gestaffelten Bereich. Ich kann sie mithilfe des Befehls git reset HEAD auflösen.

Gibt es eine direkte Möglichkeit, ein Commit ohne Commit und Staging rückgängig zu machen?

Mit anderen Worten: Gibt es einen direkten Befehl, um ein Commit rückgängig zu machen, das die Änderungen nur auf das Arbeitsverzeichnis anwendet, ohne den Index zu berühren?

+0

Wie würde das aussehen? Was bedeutet "rückgängig machen", wenn Sie keine Änderung haben, die es rückgängig macht? –

+0

Ich möchte nur die lokalen Dateien mit den rückgängig gemachten Änderungen auf sie angewendet, ohne Commits und keine Behandlung des Staging-Bereichs. Das passiert, wenn du 'git zurückdrehst -n && git reset HEAD', aber ich würde es sofort machen. – Wizard79

+2

Aha, ich verstehe - also möchten Sie, dass die rückgängig gemachte Änderungen auf das Arbeitsverzeichnis angewendet, aber nicht inszeniert werden. Wenn du deine Frage erneut liest, scheint das klar zu sein, aber meine erste Lektüre hat diese Bedeutung nicht richtig analysiert. –

Antwort

21

Es gibt keinen einzelnen Befehl dafür. Wie Sie bereits festgestellt haben, können Sie git revert -n mit git reset kombinieren, um die Umkehrung im Index rückgängig zu machen.

Neben dieser Methode können Sie git apply -R „gelten reverse“ verwenden, um einen Patch, und Sie können eine commit in einem Patch mit git show drehen, so:

$ git show <rev> | git apply -R 

hat die gleiche Wirkung, mit einem wichtigen (aber subtile) Unterschied. Lassen Sie mich aus der git revert Dokumentation zitieren und fügen Sie meinen eigenen Schwerpunkt:

-n, --no-commit
Usually the command automatically creates some commits with commit log messages stating which commits were reverted. This flag applies the changes necessary to revert the named commits to your working tree and the index, but does not make the commits. In addition, when this option is used, your index does not have to match the HEAD commit. The revert is done against the beginning state of your index.

Mit anderen Worten, git revert -ntätig ist, und auf dem Index, mit einem Nebeneffekt Ihrer Arbeit Baum zu aktualisieren. Der Befehl git apply funktioniert (standardmäßig sowieso) nur auf dem Arbeitsbaum und kann tatsächlich außerhalb eines Git-Repositorys verwendet werden.

+0

Ich habe _error: unerkannt input_. Irgendeine Idee, was schief gehen könnte? –

+0

@RobertPankowecki: https://www.google.com/search?&q=git+apply+unerkannt+seingang hat seinen ersten Treffer in einem StackOverflow-Post über eingefärbte Diffs. Das scheint das wahrscheinlichste Problem zu sein. – torek