日本語 ▾ トピック ▾ 最新バージョン ▾ git-replace は 2.44.0 で最終更新

名前

git-replace - オブジェクトを置換する参照を作成、一覧表示、削除する

概要

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>]]

説明

refs/replace/ 名前空間に *replace* 参照を追加します。

*replace* 参照の名前は、置換されるオブジェクトの SHA-1 です。*replace* 参照の内容は、置換オブジェクトの SHA-1 です。

置換されるオブジェクトと置換オブジェクトは同じタイプである必要があります。この制限は -f を使用してバイパスできます。

-f が指定されていない限り、*replace* 参照はまだ存在してはなりません。

置換されるオブジェクトと置換オブジェクトには、他に制限はありません。マージコミットは非マージコミットに置換でき、その逆も可能です。

置換参照は、到達可能性の走査を行うコマンド (prune、pack transfer、fsck) を除くすべての Git コマンドでデフォルトで使用されます。

任意のコマンドで置換参照の使用を無効にするには、*git* の直後に --no-replace-objects オプションを使用できます。

例えば、コミット *foo* がコミット *bar* に置換されている場合

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

はコミット *foo* の情報を表示しますが、

$ git cat-file commit foo

はコミット *bar* の情報を表示します。

GIT_NO_REPLACE_OBJECTS 環境変数を設定することで、--no-replace-objects オプションと同じ効果を得ることができます。

オプション

-f
--force

同じオブジェクトに対する既存の置換参照が存在する場合、それは上書きされます (失敗する代わりに)。

-d
--delete

指定されたオブジェクトの既存の置換参照を削除します。

--edit <object>

オブジェクトの内容を対話的に編集します。<object> の既存の内容は一時ファイルに整形されて出力され、ファイル上でエディタが起動され、結果がパースされて <object> と同じタイプの新しいオブジェクトが作成されます。その後、<object> を新しく作成されたオブジェクトで置換するための置換参照が作成されます。エディタの選択方法の詳細については、git-var[1] を参照してください。

--raw

編集時に、整形されたものではなく、生のオブジェクトコンテンツを提供します。現在、これはツリーにのみ影響し、バイナリ形式で表示されます。これは扱いにくいですが、整形できないほど破損したツリーを修復するのに役立つ場合があります。バイナリデータをきれいに読み書きできるようにエディタを設定する必要がある場合があります。

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

グラフトコミットを作成します。<commit> と同じ内容の新しいコミットが作成されますが、その親は <commit> の親ではなく [<parent>…​] になります。その後、<commit> を新しく作成されたコミットで置換するための置換参照が作成されます。--convert-graft-file を使用して $GIT_DIR/info/grafts ファイルを変換し、代わりに置換参照を使用します。

--convert-graft-file

$GIT_DIR/info/grafts 内のすべてのエントリに対してグラフトコミットを作成し、成功するとそのファイルを削除します。これは、現在非推奨となっているグラフトファイルからの移行を支援することを目的としています。

-l <pattern>
--list <pattern>

指定されたパターンに一致する (またはパターンが指定されていない場合はすべて) オブジェクトの置換参照を一覧表示します。引数なしで "git replace" を入力しても、すべての置換参照が一覧表示されます。

--format=<format>

一覧表示時に、指定された <format> を使用します。<format> は *short*、*medium*、*long* のいずれかです。省略された場合、形式はデフォルトで *short* になります。

形式

利用可能な形式は次のとおりです。

  • *short*: <replaced-sha1>

  • *medium*: <replaced-sha1> → <replacement-sha1>

  • *long*: <replaced-sha1> (<replaced-type>) → <replacement-sha1> (<replacement-type>)

置換オブジェクトの作成

git-hash-object[1]git-rebase[1]git-filter-repo など、他の git コマンドを使用して、既存のオブジェクトから置換オブジェクトを作成できます。--edit オプションを *git replace* とともに使用して、既存のオブジェクトを編集することで置換オブジェクトを作成することもできます。

コミットの文字列の一部である多くのブロブ、ツリー、またはコミットを置換したい場合、置換コミットの文字列を作成し、ターゲットコミット文字列の先端にあるコミットを置換コミット文字列の先端にあるコミットで置換するだけでよい場合があります。

バグ

置換されたブロブまたはツリーとそれらを置換するブロブまたはツリーを比較しても、正しく機能しません。git reset --hard を使用して置換されたコミットに戻ると、ブランチは置換されたコミットではなく置換コミットに移動します。

保留中のオブジェクトに関連して、*git rev-list* を使用する際に他の問題が発生する可能性があります。

GIT

git[1]スイートの一部

scroll-to-top