SYNOPSIS

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

DESCRIPTION

2つの引数が与えられた場合、 <new-oid> を <ref> に保存し、 必要に応じてシンボリック ref を解決します。 たとえば、 git update-ref HEAD <new-oid> は現在のブランチの先頭を新しいオブジェクトに更新します。

3つの引数が与えられた場合、 <ref> の現在の値が <old-oid> と一致することを確認した後、 <new-oid> を <ref> に格納し、 必要に応じてシンボリック rer を解決します。 たとえば、 git update-ref refs/heads/master <new-oid> <old-oid> は、 master ブランチの先頭を <new-oid> に更新しますが、 これは現在の値が <old-oid> と一致する場合に限られます。 あなたは <old-oid> として40個の 0(ゼロ) または空の文字列を指定することで、 作成しようとしている ref がまだ存在しないことを示す事ができます。

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

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

-d オプションを使用すると、 指定の <ref> がまだ <old-oid> を含んでいることを確認(verify)後、 その <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ソースコードの文字列であるかのように空白を含むフィールドをクォートします。 つまり、二重引用符で囲まれ、バックスラッシュ(\)でエスケープされます。 ゼロ値(zero value)を指定するには、40個の "0" 文字または空の文字列を使用します。 欠落している値(missing value)を指定するには、値とその前の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" を使用してゼロ値(zero value)を指定し、空の文字列を使用して欠落している値(missing value)を指定します。

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

update

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

create

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

delete

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

symref-update

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

verify

<ref> を <old-oid> と照合して検証しますが、 変更はしません。 <old-oid> がゼロまたは指定されていない場合、 ref は存在してはなりません。

symref-create

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

symref-delete

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

symref-verify

シンボリック参照 <ref> を <old-target> と照合して検証しますが、 変更はしません。 <old-target> が指定されていない場合、 ref は存在してはなりません。 no-deref モードでのみ使用可能です。

option

次に <ref> を指定するコマンドの振る舞いを変更します。 唯一有効なオプションは、 シンボリック ref のデリファレンスを回避するための no-deref です。

start

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

prepare

取引(transaction)をコミットする準備をします。 これにより、 キューに入れられたすべての参照更新のロック・ファイルが作成されます。 ロックできない参照がある場合、 取引は中止(abort)されます。

commit

取引(transaction)のためにキューに入れられたすべての参照更新をコミットし、 取引を終了(ending)します。

abort

取引(transaction)を中止(abort)し、 取引が準備済み状態(prepared state)の場合はすべてのロックを解除します。

すべての <ref> を一致する <old-oid> で同時にロックできる場合、すべての変更が実行されます。 それ以外の場合、変更は実行されません。 注意: 個々の <ref> はアトミックに更新または削除されますが、 並行読み取り(concurrent reader)では変更のサブセットが表示される場合があることに注意してください。

LOGGING UPDATES

構成パラメーター core.logAllRefUpdates がtrueで、参照が refs/heads/ の下にある場合、 refs/remotes/ または refs/notes/ または HEADやORIG_HEADのような疑似参照 または ファイル $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コミッターID形式のコミッターの名前、メールアドレス、日付です。

オプションで -m と一緒に使用すると:

oldsha1 SP newsha1 SP committer TAB message LF

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

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

NOTES

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

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

SEE ALSO

GIT

Part of the git(1) suite