git replace
Ersetzt ein Objekt durch ein anderes, ohne die Historie umzuschreiben
Der Befehl 'git replace' sagt Git, überall dort, wo ein Objekt vorkommt, ein anderes zu verwenden — etwa um eine alte Historie an eine neue anzuhängen oder einen kaputten Commit zu verdecken — ohne einen Commit umzuschreiben. Ersetzungen liegen als Refs unter refs/replace/ und lassen sich teilen oder entfernen. Die meisten Befehle folgen ihnen; git log markiert ersetzte Commits.
Syntax
git replace [-f] <object> <replacement>
git replace --graft <commit> [<parent>...]
git replace -d <object>...
git replace -lBeispiele
Eine Historie anhängen
git replace --graft <first-new-commit> <last-old-commit>Eine importierte alte Historie anschließen.
Auflisten
git replace -lErsetzte Objekte.
Rückgängig
git replace -d <object>Eine Ersetzung entfernen.
Workflow-Beispiele
git fetch old-repoDie alten Commits holen
git replace --graft <new-root> old/mainDie neue Wurzel die alte Historie fortsetzen lassen
Fehlerbehebung
Die Ersetzung ist für andere nicht sichtbar
Ursache: refs/replace wird standardmäßig nicht gepusht
git push origin "refs/replace/*"
Tipps & Stolperfallen
Best Practices
- ✓Nutze --graft zum Verbinden von Historien; vermeide Ersetzungen für alltägliche Korrekturen.
Häufige Fehler
- ✗Vergessen, dass Ersetzungen lokal sind, solange du refs/replace/* nicht pushst.
FAQ
Ja: git --no-replace-objects <command>.