セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット作成
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
Eメール
外部システム
サーバー管理
-
2.49.0
2025-03-14
- 2.48.1 変更なし
-
2.48.0
2025-01-10
- 2.45.1 → 2.47.2 変更なし
- 2.45.0 変更なし
- 2.43.1 → 2.44.3 変更なし
-
2.43.0
2023-11-20
- 2.36.1 → 2.42.4 変更なし
-
2.36.0
2022-04-18
- 2.25.3 → 2.35.8 変更なし
-
2.25.2
2020-03-17
- 2.25.1 変更なし
-
2.25.0
2020-01-13
- 2.24.1 → 2.24.4 変更なし
-
2.24.0
2019-11-04
- 2.23.1 → 2.23.4 変更なし
-
2.23.0
2019-08-16
- 2.18.1 → 2.22.5 変更なし
-
2.18.0
2018-06-21
- 2.15.4 → 2.17.6 変更なし
-
2.14.6
2019-12-06
- 2.2.3 → 2.13.7 変更なし
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
説明
このマニュアルでは、Git CLI全体で使用される慣例について説明します。
多くのコマンドは、引数としてリビジョン(ほとんどの場合「コミット」、ただしコンテキストやコマンドによっては「tree-ish」)とパスを受け取ります。以下にそのルールを示します。
-
オプションは最初に、その後に引数が来ます。サブコマンドはダッシュ付きオプション(例: "--max-parents 2"のように独自の引数を取る場合があります)と引数を取ることができます。ダッシュ付きオプションを最初に指定し、その後に引数を指定すべきです。一部のコマンドは、オプション以外の引数を既に指定した後でもダッシュ付きオプションを受け入れる場合があります(これによりコマンドが曖昧になる可能性があります)が、それに依存すべきではありません(最終的に「オプションの後に引数」のルールを強制することで、これらの曖昧さを解消する方法が見つかる可能性があるためです)。
-
リビジョンが最初に、その後にパスが来ます。例として、
git diff v1.0 v2.0 arch/x86 include/asm-x86
では、v1.0
とv2.0
がリビジョンで、arch/x86
とinclude/asm-x86
がパスです。 -
引数がリビジョンまたはパスのいずれかとして誤解される可能性がある場合、それらの間に
--
を置くことで曖昧さを解消できます。例として、git diff -- HEAD
は、「作業ツリーにHEADという名前のファイルがあります。そのファイルについて、インデックスにステージングしたバージョンと作業ツリーにあるバージョンの変更点を示してください」という意味であり、「HEADコミットと作業ツリー全体の差分を表示する」という意味ではありません。後者を求める場合は、git diff HEAD --
と指定できます。 -
--
による曖昧さ解消がない場合、Gitは合理的な推測を行いますが、曖昧な場合はエラーを出し、曖昧さを解消するよう求めます。例として、作業ツリーにHEADという名前のファイルがある場合、git diff HEAD
は曖昧であるため、git diff HEAD --
またはgit diff -- HEAD
のいずれかを指定して曖昧さを解消する必要があります。 -
一部のコマンドでは
--
がリビジョンとパスの曖昧さを解消するため、これらのコマンドではオプションとリビジョンを区切るために使用することはできません。この目的には--end-of-options
を使用できます(これはパス内のリビジョンを区別しないコマンドでも機能し、その場合は単に--
のエイリアスとして機能します)。ランダムなユーザー入力を処理することが期待されるスクリプトを作成する際には、適切な場所に曖昧さ解消のための
--
を配置して、どの引数が何であるかを明示的に示すのが良い習慣です。 -
多くのコマンドはパスにワイルドカードを許可しますが、それらがシェルによってグロブされないように保護する必要があります。以下の2つは異なる意味を持ちます。
$ git restore *.c $ git restore \*.c
前者はシェルにファイルグロブを展開させ、作業ツリー内の`.c`ファイルをインデックス内のバージョンで上書きすることを求めています。後者は
*.c
をGitに渡し、パターンに一致するインデックス内のパスを作業ツリーにチェックアウトすることを求めています。git add hello.c; rm hello.c
を実行した後、前者では作業ツリーにhello.c
が表示されませんが、後者では表示されます。 -
ファイルシステムの
.
(ピリオド)がカレントディレクトリを指すのと同様に、Gitで.
をリポジトリ名(ドットリポジトリ)として使用すると、相対パスとなり、現在のリポジトリを意味します。
Gitをスクリプト化する際に従うべき「フラグ」に関するルールは以下の通りです。
-
短いオプションを個別の単語に分割する(
git foo -ab
よりもgit foo -a -b
を推奨。後者は機能しない場合があります)。 -
コマンドラインオプションが引数を取る場合、stuck形式を使用します。つまり、短いオプションの場合は
git foo -o Arg
ではなくgit foo -oArg
と書き、長いオプションの場合はgit foo --long-opt Arg
ではなくgit foo --long-opt=Arg
と書きます。オプションの引数を取るオプションは、stuck形式で記述する必要があります。 -
上記の提案にもかかわらず、Argがユーザーのホームディレクトリに対する相対パス(例:
~/directory/file
や~u/d/f
)である場合、git foo --file=~/mine
ではなく、git foo --file ~/mine
のように分離した形式を使用したい場合があります。前者の~/
はシェルによってホームディレクトリに展開されますが、ほとんどのシェルは後者ではチルダを保持します。一部のコマンドは、stuck形式で与えられた場合でもオプション値のチルダ展開方法を知っていますが、すべてのコマンドがそうではありません。 -
コマンドにリビジョンパラメータを与える場合、そのパラメータが作業ツリー内のファイル名と曖昧にならないようにしてください。例えば、
git log -1 HEAD
と書くのではなく、git log -1 HEAD --
と書いてください。前者は、作業ツリーにたまたまHEAD
というファイルがある場合に機能しません。 -
多くのコマンドでは、長いオプション
--option
を一意のプレフィックスにのみ省略することを許可していますが(例:opt
で始まる他のオプションがない場合、--opt
と入力して--option
フラグを呼び出すことができるかもしれません)、スクリプトを作成する際は完全に記述すべきです。Gitの将来のバージョンでは、同じプレフィックスを共有する新しいオプション(例:--optimize
)が導入され、かつて一意であった短いプレフィックスが一意でなくなる可能性があります。
拡張オプションパーサー
Git 1.5.4 シリーズ以降、多くのGitコマンド(執筆時点ではすべてではありませんが)には、拡張オプションパーサーが付属しています。
以下に、このオプションパーサーが提供する機能のリストを示します。
マジックオプション
拡張オプションパーサーが有効になっているコマンドはすべて、いくつかのマジックコマンドラインオプションを理解します。
- -h
-
コマンドの整形された使用法を表示します。
$ git describe -h usage: git describe [<options>] <commit-ish>* or: git describe [<options>] --dirty --contains find the tag that comes after the commit --debug debug search strategy on stderr --all use any ref --tags use any tag, even unannotated --long always use long format --abbrev[=<n>] use <n> digits to display SHA-1s
一部のサブコマンド(例:
git grep
)は、コマンドラインに-h
以外のものがある場合に異なる動作をする可能性があることに注意してください。しかし、コマンドラインに他の何も指定せずにgit subcmd -h
と入力することは、一貫して使用法を表示することを意図しています。 - --help-all
-
一部のGitコマンドは、内部処理にのみ使用されるオプションや非推奨のオプションを取ります。これらのオプションはデフォルトの使用法からは隠されています。このオプションは、オプションの完全なリストを表示します。
オプションの否定
長いオプション名を持つオプションは、--no-
をプレフィックスとして付けることで否定できます。例えば、git branch
にはデフォルトで有効になっている--track
オプションがあります。--no-track
を使用すると、その動作を上書きできます。--color
と--no-color
についても同様です。
オプションは設定と環境を上書きする
Gitコマンドの動作の側面を調整する設定変数または環境変数があり、かつ同じことを調整するコマンドラインオプションもある場合、コマンドラインオプションが設定変数や環境変数の指定を上書きします。
例えば、user.name
設定変数は、git commit
コマンドが新しく作成されたコミットに著者名とコミッター名を記録するために使用する、人間が読める名前を指定するために使用されます。GIT_AUTHOR_NAME
環境変数が設定されている場合、記録する著者名を決定する際に優先されます。git commit
コマンドの--author=<author>
コマンドラインオプションは、指定された場合、これら2つの情報源よりも優先されます。
長いオプションの省略
拡張オプションパーサーをサポートするコマンドは、長いオプションの一意のプレフィックスを、完全に記述されたかのように受け入れますが、これには注意して使用してください。例えば、git commit --amen
はgit commit --amend
と入力したかのように動作しますが、これはGitの将来のバージョンで、同じプレフィックスを共有する別のオプション(例:git commit --amenity
オプション)が導入されるまでの間だけ当てはまります。
オプションからの引数の分離
オプションに対する必須のオプションパラメータを、コマンドライン上で個別の単語として記述できます。つまり、以下のすべての使用法が機能します。
$ git foo --long-opt=Arg $ git foo --long-opt Arg $ git foo -oArg $ git foo -o Arg
ただし、これはオプション値を持つスイッチでは**許可されていません**。その場合はstuck形式を使用する必要があります。
$ git describe --abbrev HEAD # correct $ git describe --abbrev=10 HEAD # correct $ git describe --abbrev 10 HEAD # NOT WHAT YOU MEANT
よく混同されるオプションに関する注意点
作業ツリー内および/またはインデックス内のファイルを操作できる多くのコマンドは、--cached
および/または--index
オプションを受け入れます。インデックスが元々キャッシュと呼ばれていたため、これらが同義語であると誤解する人がいますが、これらは**異なり**ます。これら2つのオプションは非常に異なる意味を持ちます。
-
--cached
オプションは、通常は作業ツリー内のファイルを操作するコマンドに対して、**インデックスのみ**を操作するように要求するために使用されます。例えば、git grep
は、文字列を検索するコミットを指定せずに使用すると、通常は作業ツリー内のファイルを操作しますが、--cached
オプションを使用すると、インデックス内の文字列を検索します。 -
--index
オプションは、通常は作業ツリー内のファイルを操作するコマンドに対して、**インデックスにも**影響を与えるように要求するために使用されます。例えば、git stash apply
は通常、スタッシュエントリに記録された変更を作業ツリーにマージしますが、--index
オプションを使用すると、インデックスにも変更をマージします。
git apply
コマンドは、--cached
と--index
の両方で使用できます(ただし同時に使用することはできません)。通常、このコマンドは作業ツリー内のファイルのみに影響を与えますが、--index
を使用するとファイルとそれらのインデックスエントリの両方をパッチし、--cached
を使用するとインデックスエントリのみを変更します。
詳細については、https://lore.kernel.org/git/7v64clg5u9.fsf@assigned-by-dhcp.cox.net/ および https://lore.kernel.org/git/7vy7ej9g38.fsf@gitster.siamese.dyndns.org/ も参照してください。
作業ツリー内および/またはインデックス内のファイルを操作する他のいくつかのコマンドは、--staged
および/または--worktree
を受け入れます。
-
--staged
は--cached
とまったく同じで、作業ツリーではなくインデックスのみを操作するようコマンドに要求するために使用されます。 -
--worktree
は反対で、インデックスではなく作業ツリーのみを操作するようコマンドに要求します。 -
両方のオプションを一緒に指定することで、インデックスと作業ツリーの両方を操作するようコマンドに要求できます。
Git
git[1]スイートの一部