Git
English ▾ トピック ▾ 最新バージョン ▾ git-update-ref の最終更新は 2.46.0

名前

git-update-ref - refに格納されたオブジェクト名を安全に更新する

概要

git update-ref [-m <reason>] [--no-deref] (-d <ref> [<old-oid>] | [--create-reflog] <ref> <new-oid> [<old-oid>] | --stdin [-z])

説明

2つの引数が与えられると、シンボリック参照を逆参照する可能性のある を格納します。例えば、git update-ref HEAD <new-oid> は現在のブランチのヘッドを新しいオブジェクトに更新します。

3つの引数が与えられると、 の現在の値が と一致することを確認した後、シンボリック参照を逆参照する可能性のある を格納します。例えば、git update-ref refs/heads/master <new-oid> <old-oid> は、現在の値が の場合にのみ、マスターブランチのヘッドを に更新します。作成する ref が存在しないことを確認するために、 として 40 個の "0" または空の文字列を指定できます。

また、"ref:" の4バイトのヘッダーシーケンスで始まることによって、"ref" ファイルが別のrefファイルへのシンボリックポインターであることも許可します。

さらに重要なことは、シンボリックリンクであろうと、これらの「通常ファイルシンボリック参照」であろうと、refファイルの更新がこれらのシンボリックポインターに従うことを許可します。実際 のシンボリックリンクは "refs/" で始まる場合にのみ追跡します。それ以外の場合は、それらを読み込んで通常のファイルとして更新しようとします(つまり、ファイルシステムがそれらを追跡することを許可しますが、別の場所へのそのようなシンボリックリンクを通常のファイル名で上書きします)。

--no-deref が指定されている場合、シンボリックポインターをたどった結果ではなく、 自体が上書きされます。

一般的に、以下を使用する必要があります

git update-ref HEAD "$head"

は、

echo "$head" > "$GIT_DIR/HEAD"

よりも、シンボリックリンクの追跡という観点エラーチェックの観点から、はるかに安全であるはずです。シンボリックリンクに関する "refs/" ルールは、ツリーの「外部」を指すシンボリックリンクが安全であることを意味します。それらは読み取りでは追跡されますが、書き込みでは追跡されません(したがって、シンボリックリンクツリーを作成してアーカイブ全体をコピーした場合、refシンボリックリンクを介して別のツリーに書き込むことは決してありません)。

-d フラグを指定すると、名前付きの がまだ を含んでいることを確認した後、削除します。

--stdin を指定すると、update-ref は標準入力から命令を読み取り、すべての変更をまとめて実行します。次の形式でコマンドを指定します

update SP <ref> SP <new-oid> [SP <old-oid>] LF
create SP <ref> SP <new-oid> LF
delete SP <ref> [SP <old-oid>] LF
verify SP <ref> [SP <old-oid>] LF
symref-update SP <ref> SP <new-target> [SP (ref SP <old-target> | oid SP <old-oid>)] LF
symref-create SP <ref> SP <new-target> LF
symref-delete SP <ref> [SP <old-target>] LF
symref-verify SP <ref> [SP <old-target>] LF
option SP <opt> LF
start LF
prepare LF
commit LF
abort LF

--create-reflog を指定すると、update-ref は、通常は作成されない場合でも、各 ref に対して reflog を作成します。

Cソースコードの文字列のように、空白を含むフィールドを引用符で囲みます。つまり、二重引用符で囲み、バックスラッシュエスケープを使用します。ゼロ値を指定するには、40 個の "0" 文字または空の文字列を使用します。欠落値を指定するには、値とその前の SP を完全に省略します。

または、-z を使用して、引用符なしで NUL 終端形式で指定します

update SP <ref> NUL <new-oid> NUL [<old-oid>] NUL
create SP <ref> NUL <new-oid> NUL
delete SP <ref> NUL [<old-oid>] NUL
verify SP <ref> NUL [<old-oid>] NUL
symref-update SP <ref> NUL <new-target> [NUL (ref NUL <old-target> | oid NUL <old-oid>)] NUL
symref-create SP <ref> NUL <new-target> NUL
symref-delete SP <ref> [NUL <old-target>] NUL
symref-verify SP <ref> [NUL <old-target>] NUL
option SP <opt> NUL
start NUL
prepare NUL
commit NUL
abort NUL

この形式では、ゼロ値を指定するには 40 個の "0" を使用し、欠落値を指定するには空の文字列を使用します。

どちらの形式でも、Gitがオブジェクト名として認識する任意の形式で値を指定できます。他の形式のコマンドまたは繰り返し はエラーを生成します。コマンドの意味は次のとおりです。

update

必要に応じて、 を検証した後、 に設定します。更新後に ref が存在しないようにするには、ゼロの を指定し、更新前に ref が存在しないことを確認するには、ゼロの を指定します。

create

存在しないことを確認した後、 で作成します。指定された はゼロであってはなりません。

delete

存在し、必要に応じて が含まれていることを確認した後、 を削除します。指定された場合、 はゼロであってはなりません。

symref-update

必要に応じて、 または を検証した後、 に設定します。更新前に ref が存在しないことを確認するには、ゼロの を指定します。

verify

に対して を検証しますが、変更はしません。 がゼロまたは欠落している場合、ref は存在してはなりません。

symref-create: 存在しないことを確認した後、 でシンボリック ref を作成します。

symref-delete

必要に応じて、 が存在することを確認した後、 を削除します。

symref-verify

に対してシンボリック を検証しますが、変更はしません。 が欠落している場合、ref は存在してはなりません。no-deref モードでのみ使用できます。

option

を指定する次のコマンドの動作を変更します。有効なオプションは、シンボリック ref の逆参照を回避する no-deref のみです。

start

トランザクションを開始します。非トランザクションセッションとは対照的に、トランザクションは、明示的なコミットなしにセッションが終了すると、自動的に中止されます。このコマンドは、現在のトランザクションがすでにコミットまたは中止されている場合に、新しい空のトランザクションを作成することがあります。

prepare

トランザクションをコミットする準備をします。これにより、キューに入れられたすべての参照更新に対してロックファイルが作成されます。1つの参照をロックできなかった場合、トランザクションは中止されます。

commit

トランザクション用にキューに入れられたすべての参照更新をコミットし、トランザクションを終了します。

abort

トランザクションを中止し、トランザクションが準備状態の場合、すべてのロックを解除します。

すべての を同時に一致する でロックできる場合、すべての変更が実行されます。それ以外の場合、変更は実行されません。個々の はアトミックに更新または削除されますが、同時リーダーは変更のサブセットをまだ認識する可能性があることに注意してください。

更新のログ記録

構成パラメーター "core.logAllRefUpdates" が true で、ref が "refs/heads/"、"refs/remotes/"、"refs/notes/" の下にあるか、HEAD または ORIG_HEAD のような疑似refである場合、またはファイル "$GIT_DIR/logs/" が存在する場合、git update-ref は、ref 値の変更を記述した行をログファイル "$GIT_DIR/logs/" に(ログ名を作成する前にすべてのシンボリック参照を逆参照して)追加します。ログ行は、次の形式でフォーマットされます

oldsha1 SP newsha1 SP committer LF

ここで、"oldsha1" は に以前に格納されていた 40 文字の16進数値、"newsha1" は の 40 文字の16進数値、"committer" は、標準の Git コミッター識別形式でのコミッターの名前、メールアドレス、および日付です。

オプションで -m

oldsha1 SP newsha1 SP committer TAB message LF

ここで、すべてのフィールドは上記のとおりであり、"message" は -m オプションに指定された値です。

現在のユーザーが新しいログファイルを作成できない場合、既存のログファイルに追加できない場合、またはコミッター情報が利用できない場合、更新は失敗します( を変更せずに)。

GIT

git[1] スイートの一部

scroll-to-top