Sagen wir, ich habe folgende Geschichte:Set begehen als root begehen
commit A
[... list of commits]
commit R
[... list of commits]
commit Z
Ich möchte R als erste setzen begehen und löschen alle, bevor sie sind aber halten Geschichte von R nach A. begehen Das Ergebnis wäre:
commit A
[... list of commits]
commit R
Ist das möglich?
Der Inhalt des Commits 'R' enthält seine 'Eltern'-Linie (n), die ihn mit früheren Commits verbinden, so dass ein ansonsten äquivalentes Commit, das * ein * Root-Commit ist (ohne" Eltern "-Zeilen), zur Folge hat in einer neuen, anderen Hash-ID. Folglich muss jedes nachfolgende Commit (bis zu "A") * ebenfalls * in ein neues, anderes Commit (mit verschiedenen "Eltern" -Zeilen) kopiert werden. Ist das akzeptabel/wünschenswert? – torek
Ja, neue Hashes sind völlig akzeptabel – Komo
In diesem Fall können Sie 'git filter-branch' verwenden, um alle früheren Commits zu löschen. Es gibt mehrere Möglichkeiten, dies einzurichten, aber die einfachste allgemeine Methode besteht darin, 'git replace' zu verwenden, um eine Kopie von' R' ohne Eltern zu erstellen (lesen Sie die man-Seiten für 'git replace'), dann führen Sie' git filter aus "-branch" mit '--all', und wenn es mit Tags versehene Tags gibt,' --tag-name-filter cat'. – torek