日本語 ▾ トピック ▾ 最新バージョン ▾ git-update-ref は 2.50.0 で最終更新されました

名前

git-update-ref - ref に保存されているオブジェクト名を安全に更新する

概要

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

説明

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

3つの引数が与えられた場合、<ref> の現在の値が <old-oid> と一致することを確認した後、<new-oid> を <ref> に保存し、シンボリック ref を間接的に参照する可能性があります。例えば、git update-ref refs/heads/master <new-oid> <old-oid> は、マスターブランチのヘッドが <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 を作成します。

--batch-updates を使用すると、update-ref は更新をバッチで実行しますが、個々の更新が不正または誤ったユーザー入力のために失敗することを許容し、成功した更新のみを適用します。ただし、I/O 障害やメモリの問題などのシステム関連のエラーは、すべてのバッチ更新が完全に失敗する原因となります。失敗した更新は、次の形式で報告されます。

rejected SP (<old-oid> | <old-target>) SP (<new-oid> | <new-target>) SP <rejection-reason> LF

空白を含むフィールドは、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 がオブジェクト名として認識する任意の形式で指定できます。その他の形式のコマンドや重複する <ref> はエラーを生成します。コマンドの意味は以下のとおりです。

update

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

create

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

delete

<old-oid> が指定されている場合、それを持つ <ref> が存在することを確認した後、その <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> が存在することを確認した後、その <ref> を削除します。

symref-verify

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

option

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

start

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

prepare

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

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