Ich habe 2 Commits, die ich nicht gepusht habe:
$ git status
# On branch master
# Your branch is ahead of 'faves/master' by 2 commits.
Wie kann ich meinen ersten (den ältesten) zurücksetzen, aber den zweiten behalten?
$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...
Von hier:
http://friendfeed.com/harijay/742631ff/git-question-how-do-i-rollback-commit-just-want
Muss ich nur Folgendes tun:
git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
Das ist?
Antworten:
Der sicherste und wahrscheinlich sauberste Weg ist das interaktive Rebasen.
Oder,
Von dort aus können Sie Commits quetschen, wodurch ein oder mehrere Commits zum vorherigen Commit zusammengefasst werden. Um ein Commit vollständig aus dem Verlauf zu löschen, löschen Sie die Zeile aus der Liste.
Sie können ein Commit mit
git revert
zurücksetzen, es werden jedoch mehr Commit-Nachrichten in den Verlauf eingefügt, was möglicherweise unerwünscht ist. Verwenden Sie den-n
Parameter, um Git anzuweisen, das Zurücksetzen nicht sofort zu bestätigen. Sie können interaktiv rebasieren und diese bis zu einem früheren Commit komprimieren, um die Dinge sauber zu halten.Wenn die beiden Festschreibungen, mit denen Sie hier arbeiten, dieselbe (n) Datei (en) betreffen, wird möglicherweise ein Zusammenführungskonflikt angezeigt.
Das Zurücksetzen des Repositorys mit
git reset --hard
sollte mit Vorsicht erfolgen, da es nicht rückgängig gemacht werden kann.Das Umschreiben des Verlaufs sollte mit Sorgfalt erfolgen.
quelle
rebase
so wenig wie möglich zu verwenden. Wenn Sie mit anderen arbeiten, dann machen Sie einfachrevert
.Dies ist, wenn von http://nakkaya.com/2009/09/24/git-delete-last-commit/ und es hat bei mir funktioniert
quelle
Nee. git-reset --hard bringt Sie zurück in die Geschichte. Was Sie suchen, ist git revert, wodurch ein Commit rückgängig gemacht wird.
quelle
Ich habe das gerade gemacht:
Ich habe es vermasselt, also habe ich es getan
Dann habe ich es noch einmal gemacht. Dann musste ich so pushen:
Und es hat die Commits zerstört, die neuer sind als das Commit, auf das ich zurückgesetzt hatte. Hat super funktioniert.
quelle
Nein,
git reset --hard baf8d5e
löscht das3368e1c
Commit und HEAD istbaf8d5e
danach auf.Wenn Sie das
3368e1c
Commit beibehalten und das Commit löschen möchtenbad8d5e
, ist es am einfachsten, ein "git rebase -i HEAD~2
" auszuführen (dh eine interaktive Neubasis der letzten beiden Commits). Mit diesem Befehl wird der Commit-Nachrichten-Editor gestartet, und für die letzten beiden Commits wird jeweils eine Zeile angezeigt. Dort löschen Sie einfach diebad8d5e
Festschreibungszeile und speichern. git schreibt dann Ihren Verlauf neu und das 2. Commit ist weg.Es gibt andere nützliche Befehle , die Sie im Nachrichten - Editor begehen können , wie
squash
,edit
etc. Interaktive Unterfütterungsmaterial ist sehr mächtig!Tun Sie dies nicht, wenn jemand diese Commits bereits gesehen hat (Push oder Pull aus Ihrem Repository)!
quelle
In Bezug auf jtimbermans Kommentar
git reset --hard
, dass man nicht rückgängig machen kann, ist das nicht ganz richtig. Siehe hier: https://stackoverflow.com/questions/5473/undoing-a-git-reset-hard-head1quelle
ist die einzige Möglichkeit, ein Commit rückgängig zu machen, wenn sich nur ein weiteres Commit im Repo befindet (z. B. initiales Commit und 1 weiteres). Die übrigen Möglichkeiten (Zurücksetzen, Wiederherstellen) funktionieren nicht, zumindest ab Version 1.7.5.1.
Wenn Sie dem
git reset
mit einem folgen,git gc
löscht git die alten Commit-Daten vollständig aus dem Repo.quelle
Dadurch wird das Verzeichnis aus der angegebenen Baumstruktur für das Verzeichnis / path / to / dir zurückgegeben
quelle
Ich habe dies erreicht, indem ich die Hash-Codes der letzten Festschreibungen aus den HEAD-Dateien im Repository-Ordner manuell bearbeitete:
Vorher war es mir nie möglich, die von mir vor Ort durchgeführten UNMERGE-Operationen auf den Weg zu bringen. Es wurde immer wieder gesagt, dass es "einige Refs nicht pushen konnte".
quelle