Wie verschiebst du ein Commit in den Staging-Bereich in Git?

143

Wenn Sie ein Commit in den Staging-Bereich verschieben möchten - das heißt, Sie müssen es nicht festschreiben und alle darin enthaltenen Änderungen in den Staging-Bereich verschieben (wodurch der Zweig effektiv in den Zustand versetzt wird, in dem er sich vor dem Commit befunden hätte) - wie machst du das? Oder ist es etwas, was du nicht kannst?

Das nächste, was ich tun kann, ist, alle Dateien, die im Commit geändert wurden, an einen anderen Ort zu kopieren, den Zweig vor dem Commit, den Sie in den Staging-Bereich verschieben möchten, auf das Commit zurückzusetzen und alle Dateien zu verschieben kopierte Dateien zurück in das Repository und fügte sie dann dem Staging-Bereich hinzu. Es funktioniert, aber es ist nicht gerade eine gute Lösung. Ich möchte in der Lage sein, das Commit einfach rückgängig zu machen und seine Änderung in den Staging-Bereich zu verschieben. Kann es gemacht werden? Und wenn ja, wie?

Jonathan M Davis
quelle

Antworten:

267
git reset --soft HEAD^

Dadurch wird Ihr Index auf HEAD^(das vorherige Commit) zurückgesetzt, Ihre Änderungen bleiben jedoch im Staging-Bereich.

In den Dokumenten finden Sie einige nützliche Diagrammegit-reset

Wenn Sie unter Windows arbeiten, müssen Sie möglicherweise dieses Format verwenden:

git reset --soft HEAD~1
Abizern
quelle
18
Wenn dies nichts bewirkt, versuchen Sie, git reset --soft HEAD~1was dasselbe bedeutet, aber auch unter Windows funktioniert.
Roman Starkov
9
Zur Verdeutlichung bedeuten Tilde und Carot in Git-Versionen unterschiedliche Bedeutungen. HEAD ~ 1 folgt immer dem ersten übergeordneten Element eines Commits. Dies ist möglicherweise nicht das, was Sie möchten, wenn es sich um ein Zusammenführungs-Commit handelt, das mehrere übergeordnete Elemente hat. In Bezug auf die Windows-Cmd-Shell müssen Sie nur mit einem anderen Carot aus dem Carot entkommen, z. B. "git reset --soft HEAD ^^", um zu "HEAD ^" zurückzukehren. Dies ist lediglich ein Artefakt der Windows-Cmd-Shell. Sie sollten dies also nicht tun müssen, wenn Sie unter Windows eine Git-GUI verwenden. Tilde und Carot werden unter schacon.github.io/git/git-rev-parse#_specifying_revisions
ahains
Ich habe einen Link für die "handlichen Diagramme" hinzugefügt. Könnten Sie schnell überprüfen, ob es zu dem Abschnitt führt, den Sie gemeint haben? Vielen Dank
Neuron
5

Ein einfacher Weg

  1. Festgeschriebene Dateien im Staging-Bereich

    git reset --soft HEAD^1

  2. Staging to UnStage : (Verwenden Sie "git reset HEAD ...", um die Bühne zu verlassen)

    git reset HEAD git commands.txt or git reset HEAD *ds.txt

hier * -> enden alle Dateien mit ds.txt, um die Bühne zu verlassen.

Weitere Informationen finden Sie im folgenden Bild:

Geben Sie hier die Bildbeschreibung ein

Shiva Nandam Sirmarigari
quelle