Im Gegensatz zur akzeptierten Antwort, würde ich vorschlagen, (vorausgesetzt, dass Sie über den master
Zweig sprechen, die Sie ein paar Commits zurück wollen, während die übersprungenen diejenigen halten irgendwo):
git checkout master
git checkout -b old_master
git branch -f master D
git checkout master
Dies gibt Ihnen eine sehr klare Geschichte, und die Junk Sie noch entfernt ist um
master
|
v
A-B-C-D
\
E-F
^
|
old_master
Alle weiteren Commits zu einem divergierenden Geschichte führen wird ...
master
|
v
A-B-C-D-G-H
\
E-F
^
|
old_master
Also E und F werden nie Ihre "echte" Geschichte durcheinander bringen, aber Sie werden immer in der Lage sein, zu ihnen zurückzukehren. Wenn und wann du entscheidest, dass du sie endlich nicht mehr brauchst, du bist nur git branch -D old_master
und sie sind spurlos verschwunden.
Warum möchten Sie eine Kopie eines Git-Commits auf dem HEAD spielen, und was würde das überhaupt bedeuten? –
Ich habe meine vorherigen Commits vermasselt, aber ich möchte sie als History behalten – slimboy
Gibt es bestimmte Elemente von 'E' und' F', die du beibehalten willst? Warum nicht einfach "F" und "E" zurücksetzen und damit fertig sein? Ein Zurücksetzen auf den aktuellen 'HEAD' wird niemals einen Konflikt verursachen. –