git replace

Patches & Umschreiben

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 -l
[ ] optional| oder<arg> Platzhalter... wiederholbar--flag Option

Beispiele

Eine Historie anhängen

git replace --graft <first-new-commit> <last-old-commit>

Eine importierte alte Historie anschließen.


Auflisten

git replace -l

Ersetzte Objekte.


Rückgängig

git replace -d <object>

Eine Ersetzung entfernen.

Workflow-Beispiele

1
git fetch old-repo

Die alten Commits holen

2
git replace --graft <new-root> old/main

Die 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

A:

Ja: git --no-replace-objects <command>.