English ▾ トピック ▾ 最新バージョン ▾ 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> を新しく作成されたコミットで置き換えるための置き換え参照が作成されます。`$GIT_DIR/info/grafts` ファイルを変換し、代わりに置き換え参照を使用するには、`--convert-graft-file` を使用します。

--convert-graft-file

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

-l <pattern>
--list <pattern>

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

--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コマンドと同様に、既存のオブジェクトから置き換えオブジェクトを作成するために使用できます。*git replace* で `--edit` オプションを使用すると、既存のオブジェクトを編集して置き換えオブジェクトを作成することもできます。

多数のブロブ、ツリー、またはコミットの連鎖の一部であるコミットを置き換えたい場合、置き換えとなるコミットの連鎖を作成し、対象のコミット連鎖の先端にあるコミットを、置き換えコミット連鎖の先端にあるコミットのみで置き換える方が良いかもしれません。

バグ

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

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

GIT

git[1] スイートの一部

scroll-to-top