Gibt es eine Möglichkeit, alle Commits vor einem angegebenen Commit zu entfernen und dieses Commit als Initial zu verwenden?Entfernen von Commits vor dem spezifischen Commit
Antwort
Lassen Sie uns die neue sagen älteste commit der Hash ist X, und wir können „oldroot“ und „newroot“ vorübergehend verwenden:
git checkout -b oldroot X
TREE=`git write-tree`
COMMIT=`echo "Killed history" | git commit-tree "$TREE"`
git checkout -b newroot "$COMMIT"
git rebase --onto newroot oldroot master
# repeat for other branches than master that should use the new initial commit
git checkout master
git branch -D oldroot
git branch -D newroot
git gC# WARNING: if everything's done right, this will actually delete your history from the repo!
, dass eine ‚newroot‘ begehen mit dem gleichen Inhalt wie die ‚oldroot‘ schaffen wird begehen, aber ohne irgendwelche Eltern. Dann bringt es alle anderen Zweige auf die neue Wurzel zurück, die in der Geschichte aller von ihnen sein sollte.
EDIT: getestet und behoben; etwas später, ein wenig
Beachten Sie, dass "Killed history" die neue Commit-Nachricht für das initiale Commit wird. Wenn Sie etwas anderes möchten, wie zum Beispiel die ursprüngliche Nachricht, dann leiten Sie es einfach dorthin ein. –
Je einfachere Lösung wäre raffiniert, Betrachten ursprünglich Ihre Branche hat Haupt zu begehen und Sie haben Sie eine Festschreibung ersten, jetzt auch eine zweite oben auf begangen haben zuerst. So haben Sie so etwas wie:
main->first->second
Jetzt wollen Sie zweite oben auf Haupt haben, anstatt auf der ersten. Etwas wie:
main->second->first or main->second
Sie können einfach tun,
git rebase -i main
Dies gibt Ihnen eine interaktive Shell, wo Sie die Reihenfolge der Commits neu anordnen oder entfernen können irgendwelche Ihre Wahl zu begehen.
- 1. Kennen Sie GIT-Hash vor dem Commit?
- 2. Entfernen mehrerer Git-Commits aus dem Verlauf
- 3. Git - Entfernen Sie Commit aus dem Verlauf
- 4. git entfernen Zweig ohne Entfernen commits
- 5. Wie schützt man eine Datei im Git-Repository vor Commits nach dem ersten Commit?
- 6. Wie man spezifischen Commit-Code von bitbucket-git
- 7. Veröffentlichen Sie versuchen Code in Jenkins vor dem Commit
- 8. Entfernen Sie alle Text vor dem ersten Auftreten von spezifischen characeter in R
- 9. Datei aus dem geänderten Commit entfernen
- 10. Gerrit immer vor dem Senden Patchset um einen Merge Commit
- 11. Script vor dem Commit ausführen und das Update in dieses Commit aufnehmen?
- 12. Vermeide/entferne git commit, ohne andere Commits zu verlieren
- 13. Entfernen von Duplikaten aus dem Array vor dem Speichern
- 14. Git entfernen Geschichte Commit
- 15. git - Merge eine Reihe von Commits als ein Commit
- 16. Verändert der Commit-Reorder andere folgende Commits?
- 17. git entfernen Sie nachträgliche Leerzeichen in neuen Dateien vor dem Commit
- 18. Kann Datei nicht von git commit entfernen
- 19. Git-Protokoll vor einem Commit-Datum
- 20. Schützen Sie Dateien vor SVN commit
- 21. Zusammenführungskonflikte ruinieren meine Commit-Nachricht beim Quetschen von Commits
- 22. Komponist: create-Projekt mit spezifischen Commit
- 23. Nur vor dem Entfernen von Ende mit Hilfe von jquery
- 24. Element vor dem Einfügen mit Jquery entfernen
- 25. Entfernen Sie die doppelten Commits, die nach dem schlechten Rebase (s) eingeführt wurden
- 26. entfernen spezifischen Eigenschaften von JSON-Objekt
- 27. entfernen spezifischen Unterabschnitt von TOC in LaTeX
- 28. Entfernen Sie alle spezifischen Wert von Array
- 29. Entfernen leere Commits in Git
- 30. Komprimiertes Repo durch Entfernen alter Commits
Ich weiß, dass ich ein Tutorial irgendwo gesehen habe, um so etwas zu tun ... Es zeigte, wie Sie ein historisches Repo-Ende bei Commit X behalten und dann Commit X zu HEAD machen und ein neues Repo von ihnen machen, mit einer Anmerkung zu X über den Zugriff auf das historische Repo. Ich kann es jetzt nicht finden, aber es ist möglich. – Daenyth