English ▾ Themen ▾ Neueste Version ▾ git-replace zuletzt aktualisiert in 2.44.0

NAME

git-replace - Erstellt, listet, löscht Referenzen auf Ersatzobjekte

SYNOPSIS

git replace [-f] <object> <replacement>
git replace [-f] --edit <object>
git replace [-f] --graft <commit> [<parent>…​]
git replace [-f] --convert-graft-file
git replace -d <object>…​
git replace [--format=<format>] [-l [<pattern>]]

BESCHREIBUNG

Fügt eine replace-Referenz im Namensraum refs/replace/ hinzu.

Der Name der replace-Referenz ist die SHA-1 des zu ersetzenden Objekts. Der Inhalt der replace-Referenz ist die SHA-1 des Ersatzobjekts.

Das ersetzte Objekt und das Ersatzobjekt müssen vom gleichen Typ sein. Diese Einschränkung kann mit -f umgangen werden.

Sofern nicht -f angegeben wird, darf die replace-Referenz noch nicht existieren.

Es gibt keine weitere Einschränkung für die ersetzten und Ersatzobjekte. Merge-Commits können durch Nicht-Merge-Commits und umgekehrt ersetzt werden.

Ersetzungsreferenzen werden standardmäßig von allen Git-Befehlen verwendet, außer von denen, die eine Erreichbarkeitsdurchsuchung durchführen (prune, pack transfer und fsck).

Es ist möglich, die Verwendung von Ersetzungsreferenzen für jeden Befehl zu deaktivieren, indem die Option --no-replace-objects direkt nach git verwendet wird.

Wenn beispielsweise der Commit foo durch den Commit bar ersetzt wurde

$ git --no-replace-objects cat-file commit foo

zeigt Informationen über den Commit foo, während

$ git cat-file commit foo

zeigt Informationen über den Commit bar.

Die Umgebungsvariable GIT_NO_REPLACE_OBJECTS kann gesetzt werden, um den gleichen Effekt wie die Option --no-replace-objects zu erzielen.

OPTIONEN

-f
--force

Wenn für dasselbe Objekt bereits eine Ersetzungsreferenz existiert, wird diese überschrieben (anstatt abzubrechen).

-d
--delete

Löscht vorhandene Ersetzungsreferenzen für die angegebenen Objekte.

--edit <object>

Bearbeitet den Inhalt eines Objekts interaktiv. Der vorhandene Inhalt von <object> wird in eine temporäre Datei formatiert, ein Editor wird auf die Datei gestartet und das Ergebnis wird analysiert, um ein neues Objekt desselben Typs wie <object> zu erstellen. Anschließend wird eine Ersetzungsreferenz erstellt, um <object> durch das neu erstellte Objekt zu ersetzen. Einzelheiten zur Auswahl des Editors finden Sie in git-var[1].

--raw

Beim Bearbeiten werden die rohen Objektinhalte anstelle von formatierten Inhalten bereitgestellt. Derzeit betrifft dies nur Bäume, die in ihrer binären Form angezeigt werden. Dies ist schwieriger zu handhaben, kann aber bei der Reparatur eines Baums helfen, der so stark beschädigt ist, dass er nicht formatiert werden kann. Beachten Sie, dass Sie möglicherweise Ihren Editor konfigurieren müssen, um Binärdaten sauber zu lesen und zu schreiben.

--graft <commit> [<parent>…​]

Erstellt einen Graft-Commit. Ein neuer Commit wird mit demselben Inhalt wie <commit> erstellt, außer dass seine Eltern [ <parent>…​] anstelle der Eltern von <commit> sind. Anschließend wird eine Ersetzungsreferenz erstellt, um <commit> durch den neu erstellten Commit zu ersetzen. Verwenden Sie --convert-graft-file, um eine $GIT_DIR/info/grafts-Datei zu konvertieren und stattdessen Ersetzungsreferenzen zu verwenden.

--convert-graft-file

Erstellt Graft-Commits für alle Einträge in $GIT_DIR/info/grafts und löscht diese Datei bei Erfolg. Ziel ist es, Benutzern den Übergang von der nun veralteten Graft-Datei zu erleichtern.

-l <pattern>
--list <pattern>

Listet Ersetzungsreferenzen für Objekte auf, die dem angegebenen Muster entsprechen (oder alle, wenn kein Muster angegeben ist). Das Eingeben von "git replace" ohne Argumente listet ebenfalls alle Ersetzungsreferenzen auf.

--format=<format>

Beim Auflisten wird das angegebene <format> verwendet, das eine der Optionen short, medium und long sein kann. Wenn dies weggelassen wird, ist das Format standardmäßig short.

FORMATE

Die folgenden Formate sind verfügbar

  • short: <ersetzt-sha1>

  • medium: <ersetzt-sha1> → <ersetzungs-sha1>

  • long: <ersetzt-sha1> (<ersetzter-typ>) → <ersetzungs-sha1> (<ersetzungs-typ>)

ERSTELLEN VON ERSATZOBJEKTEN

git-hash-object[1], git-rebase[1] und git-filter-repo können unter anderem verwendet werden, um Ersatzobjekte aus vorhandenen Objekten zu erstellen. Die Option --edit kann auch mit git replace verwendet werden, um durch Bearbeiten eines vorhandenen Objekts ein Ersatzobjekt zu erstellen.

Wenn Sie viele Blobs, Bäume oder Commits ersetzen möchten, die Teil einer Kette von Commits sind, können Sie einfach eine Ersatz-Kette von Commits erstellen und dann nur den Commit an der Spitze der Ziel-Kette von Commits durch den Commit an der Spitze der Ersatz-Kette von Commits ersetzen.

BUGS

Der Vergleich von Blobs oder Bäumen, die ersetzt wurden, mit denen, die sie ersetzen, funktioniert nicht richtig. Und die Verwendung von git reset --hard, um zu einem ersetzten Commit zurückzukehren, verschiebt den Branch zum Ersatz-Commit anstelle des ersetzten Commits.

Es kann andere Probleme bei der Verwendung von git rev-list im Zusammenhang mit ausstehenden Objekten geben.

GIT

Teil der git[1] Suite