ファイルの差分を作成し、ワーキングディレクトリーのファイルに差分を適用するコマンドの説明
「git checkout」コマンドは、ユーザーが指定した「スナップショット」のファイルと、「ワーキングディレクトリー」のファイルの差分を作成し、「ワーキングディレクトリー」のファイルに差分を適用することもできます。この機能は、ファイルの中身の一部分を編集前の状態に戻したい時に利用します。
編集前に戻したい箇所をユーザーが選択して、ファイルの中身を編集前の状態に戻します。
差分の集合であるハンク(hunk)について
ユーザーは差分を「ハンク(hunk)」という単位で適用します。「ハンク」というのは、差分の集合・差分の集まりのことです。
1つのファイル内に変更箇所が複数行ある場合、複数の「ハンク」が現れることがあります。
例えば100行のテキストがあり、2行目から5行目及び、90行目から95行目に差分があれば、「ハンク」が2つ現れます。
それぞれの「ハンク」は、差分を適用する前に修正し、元に戻す内容を調整することもできます。
「差分の適用 = ハンクの適用」です。
「ハンク」をどの差分の範囲で作成するかは、「Git」が決定します。
もし「ハンク」内の差分が分割できる内容であれば、ユーザーは1つの「ハンク」を複数の「ハンク」に分割することもできます。
差分の状態について
それぞれの差分の状態には、以下の3種類があります。- 差分の適用を決定した
- 差分の未適用を決定した
- 差分の適用・未適用は未決
1.差分の適用を決定した
ユーザーが差分の適用を決定し、実際に差分の適用を行った状態です。2.差分の未適用を決定した
ユーザーが差分の未適用を決定し、実際に差分の適用を行わなかった状態です。3.差分の適用・未適用は未決
ユーザーが差分を適用するかどうか決定していない状態です。コマンドのフォーマット
コマンドのフォーマットは以下のようになります。
git checkout <オプション> <ツリーオブジェクト> <ファイル名>
オプション(-p, --patch)
差分の作成と差分の適用を指定するオプションです。このオプションは必須です。
ツリーオブジェクト
差分を作成するファイルが格納されている「ツリーオブジェクト」を指定します。「ワーキングディレクトリー」にあるファイルと、「ツリーオブジェクト」に格納されているファイルで比較が行われ、差分が作成されます。
「ツリーオブジェクト」を指す参照で指定することもできます。
以下の指定方法が利用できます。
- ブランチ名
- タグ名
- コミットオブジェクトの識別子
- ツリーオブジェクトの識別子
- HEAD
1.ブランチ名
ブランチが指す「コミットオブジェクト」から「ツリーオブジェクト」を指定します。2.タグ名
タグが指す「コミットオブジェクト」から「ツリーオブジェクト」を指定します。3.コミットオブジェクトの識別子
「コミットオブジェクト」の識別子を指定します。「コミットオブジェクト」から「ツリーオブジェクト」を指定できます。
コミットオブジェクトの識別子は、4文字以上を入力します。
4.ツリーオブジェクトの識別子
直接「ツリーオブジェクト」の識別子を指定します。ツリーオブジェクトの識別子は、4文字以上を入力します。
5.HEAD
「HEAD」が指す「コミットオブジェクト」から「ツリーオブジェクト」を指定します。ツリーオブジェクトの指定を省略した場合
「ツリーオブジェクト」の指定を省略した場合は、「ステージングエリア」が指定されたものとして扱われます。ファイル名
上記で指定した「ツリーオブジェクト」から展開するファイルのファイル名を指定します。複数のファイルを指定する場合は、スペース区切りでファイル名を指定します。
ファイル名にスペースが含まれる場合など、ファイル名を正しく認識させるには、「'」でファイル名を括ってください。
例:'test.txt'
パスの指定について
サブフォルダー以下のファイルを展開する場合は、パスの記述を行います。例:src/main.c
ブランチ名とファイル名が重複する場合は
既存のブランチのブランチ名とファイル名が重複する場合は、ブランチの「チェックアウト」を優先するため、そのままでは「ツリーオブジェクト」からファイルを展開することができません。ファイル名の指定であることを明示するには、「--」オプションをファイル名の前に記述します。
「ファイル名の指定を明示して、スナップショットから特定のファイルをワーキングディレクトリーに展開する」を参考にしてください。
ワイルドカードによる指定
ワイルドカードによる指定も可能です。例えば、「*.txt」のように記述することも可能です。
ワイルドカードによるファイル名の指定は、「ワイルドカードを利用して、スナップショットから特定のファイルをワーキングディレクトリーに展開する」を参考にしてください。
差分の適用対象について
「ツリーオブジェクト」を指定したかどうかで、差分の適用対象が変わります。ツリーオブジェクトを指定した場合
「ツリーオブジェクト」を指定した場合、指定された「ツリーオブジェクト」内にあるファイルと、「ワーキングディレクトリー」内にあるファイルを比較することで、差分が作成されます。差分の適用は、「ステージングエリア」にあるファイルと「ワーキングディレクトリー」内にあるファイルの両方に適用されます。
「ツリーオブジェクト」を指定した際、「ステージングエリア」にあるファイルと「ワーキングディレクトリー」内にあるファイルの中身が一致していない場合、「ワーキングディレクトリー」内にあるファイルにのみ、差分を適用することができます。
「ステージングエリア」にあるファイルに差分は適用されません。
「ツリーオブジェクト」を指定する例は、「スナップショットを指定してファイルの差分を作成し、ワーキングディレクトリーのファイルに差分を適用する」を参考にしてください。
ツリーオブジェクトを省略した場合
「ツリーオブジェクト」を省略した場合、「ステージングエリア」にあるファイルと、「ワーキングディレクトリー」内にあるファイルを比較することで、差分が作成されます。差分の適用は、「ワーキングディレクトリー」内にあるファイルに適用されます。
「ツリーオブジェクト」を省略した例は、「ステージングエリアからファイルの差分を作成し、ワーキングディレクトリーのファイルに差分を適用する」を参考にしてください。