日本語 ▾ トピック ▾ 最新バージョン ▾ git-update-ref は2.48.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つの引数が与えられた場合、シンボリックrefを間接参照して、<new-oid>を<ref>に格納します。例: git update-ref HEAD <new-oid>は現在のブランチのHEADを新しいオブジェクトに更新します。

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

最後の引数はオブジェクト名です。オプションなしのこのコマンドは、シンボリックrefを別のrefを指すように更新することをサポートしていません (git-symbolic-ref[1] を参照)。しかし、git update-ref --stdin にはsymref-*コマンドがあり、通常のrefとシンボリックrefを同じトランザクションでコミットできます。

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

-dを付けると、指定された<ref>がまだ<old-oid>を含んでいることを確認した後、その<ref>を削除します。

--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を完全に省略します。

または、引用符なしでNULL終端形式で指定するには、-zを使用します。

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がオブジェクト名として認識する任意の形式で指定できます。他の形式のコマンドや繰り返し指定された<ref>はエラーになります。コマンドの意味は以下の通りです。

update

指定された場合、<old-oid>を検証した後、<ref>を<new-oid>に設定します。更新後にrefが存在しないことを保証するにはゼロの<new-oid>を、更新前にrefが存在しないことを保証するにはゼロの<old-oid>を指定します。

create

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

delete

指定された場合、<old-oid>で存在することを確認した後、<ref>を削除します。指定された場合、<old-oid>はゼロであってはなりません。

symref-update

指定された場合、<old-target>または<old-oid>を検証した後、<ref>を<new-target>に設定します。更新前にrefが存在しないことを保証するには、ゼロの<old-oid>を指定します。

verify

<ref>を<old-oid>に対して検証しますが、変更はしません。<old-oid>がゼロまたは不足している場合、そのrefは存在してはなりません。

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

symref-delete

指定された場合、<old-target>で存在することを確認した後、<ref>を削除します。

symref-verify

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

option

<ref>を指定する次のコマンドの動作を変更します。唯一有効なオプションは、シンボリックrefの間接参照を避けるためのno-derefです。

start

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

prepare

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

commit

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

abort

トランザクションを中止し、トランザクションが準備済みの状態にある場合はすべてのロックを解放します。

すべての<ref>が一致する<old-oid>と共に同時にロックできる場合、すべての変更が実行されます。そうでない場合、変更は実行されません。個々の<ref>はアトミックに更新または削除されますが、並行して読み取るリーダーは、変更の一部しか見ることができない場合があります。

更新のログ記録

設定パラメータ "core.logAllRefUpdates" がtrueであり、そのrefが "refs/heads/"、"refs/remotes/"、"refs/notes/" のいずれかの下にあるか、HEADやORIG_HEADのような擬似refである場合、またはファイル "$GIT_DIR/logs/<ref>" が存在する場合、git update-ref はログファイル "$GIT_DIR/logs/<ref>" (ログ名を作成する前にすべてのシンボリックrefを間接参照します) にref値の変更を記述した行を追加します。ログ行の形式は以下の通りです。

oldsha1 SP newsha1 SP committer LF

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

オプションで -m を使用

oldsha1 SP newsha1 SP committer TAB message LF

ここで、すべてのフィールドは上記で説明した通りで、「message」は -m オプションに提供された値です。

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

注釈

シンボリックrefは当初、シンボリックリンクを使用して実装されていました。すべてのファイルシステムがシンボリックリンクをサポートしているわけではないため、これは現在非推奨です。

このコマンドは、"refs/" で始まる場合にのみ実際のシンボリックリンクを辿ります。それ以外の場合は、単にそれらを読み込み、通常のファイルとして更新しようとします (つまり、ファイルシステムがそれらを辿ることを許可しますが、そのようなシンボリックリンクを別の場所への通常のファイル名で上書きします)。

関連項目

GIT

git[1] スイートの一部

scroll-to-top