Git
English ▾ トピック ▾ 最新バージョン ▾ git-replace は 2.44.0 で最後に更新されました

NAME

git-replace - オブジェクトを置き換えるための refs を作成、一覧表示、削除します。

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

DESCRIPTION

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* に関する情報を表示します。

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

OPTIONS

-f
--force

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

-d
--delete

指定されたオブジェクトに対する既存の replace ref を削除します。

--edit <object>

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

--raw

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

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

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

--convert-graft-file

$GIT_DIR/info/grafts のすべてのエントリに対して graft コミットを作成し、成功したらそのファイルを削除します。これは、廃止予定の graft ファイルからの移行を支援することを目的としています。

-l <pattern>
--list <pattern>

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

--format=<format>

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

FORMATS

次の形式を使用できます。

  • 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