セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
ガイド
- gitattributes
- コマンドラインインターフェースの規約
- 日常のGit
- よくある質問 (FAQ)
- 用語集
- Hooks
- gitignore
- gitmodules
- リビジョン
- サブモジュール
- チュートリアル
- ワークフロー
- すべてのガイド...
管理
Plumbing コマンド
- 2.46.1 → 2.47.0 変更なし
-
2.46.0
07/29/24
- 2.45.1 → 2.45.2 変更なし
-
2.45.0
04/29/24
- 2.43.1 → 2.44.2 変更なし
-
2.43.0
11/20/23
- 2.30.1 → 2.42.3 変更なし
-
2.30.0
12/27/20
- 2.29.1 → 2.29.3 変更なし
-
2.29.0
10/19/20
- 2.27.1 → 2.28.1 変更なし
-
2.27.0
06/01/20
- 2.19.3 → 2.26.3 変更なし
-
2.19.2
11/21/18
- 2.18.1 → 2.19.1 変更なし
-
2.18.0
06/21/18
- 2.7.6 → 2.17.6 変更なし
-
2.6.7
05/05/17
- 2.2.3 → 2.5.6 変更なし
-
2.1.4
12/17/14
-
2.0.5
12/17/14
概要
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:" の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
symref-create: 存在しないことを確認した後、
- 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" は
オプションで -m
oldsha1 SP newsha1 SP committer TAB message LF
ここで、すべてのフィールドは上記のとおりであり、"message" は -m オプションに指定された値です。
現在のユーザーが新しいログファイルを作成できない場合、既存のログファイルに追加できない場合、またはコミッター情報が利用できない場合、更新は失敗します( を変更せずに)。
GIT
git[1] スイートの一部