ワーキングディレクトリーにあるファイルとステージングエリアにあるファイルの差分を作成し、ステージングエリアのファイルに適用する
「ワーキングディレクトリー」にあるファイルと「ステージングエリア」にあるファイルの差分を作成し、差分を「ステージングエリア」にあるファイルに適用します。以前「git checkout」コマンドの紹介で、「ファイルの差分を作成し、ワーキングディレクトリーのファイルに差分を適用するコマンド」を紹介しました。
この機能と似たような機能ですが、こちらは差分を「ステージングエリア」にあるファイルにのみ適用します。
差分の集合であるハンク(hunk)について
ユーザーは差分を「ハンク(hunk)」という単位で適用します。「ハンク」というのは、差分の集合・差分の集まりのことです。
1つのファイル内に変更箇所が複数行ある場合、複数の「ハンク」が現れることがあります。
例えば100行のテキストがあり、2行目から5行目及び、90行目から95行目に差分があれば、「ハンク」が2つ現れます。
それぞれの「ハンク」は、差分を適用する前に修正し、元に戻す内容を調整することもできます。
「差分の適用 = ハンクの適用」です。
「ハンク」をどの差分の範囲で作成するかは、「Git」が決定します。
もし「ハンク」内の差分が分割できる内容であれば、ユーザーは1つの「ハンク」を複数の「ハンク」に分割することもできます。
差分適用時の注意事項
差分を適用する際、ユーザーは差分を自分で編集し、より高度な差分を適用することができます。しかし差分が適用されるのは、「ステージングエリア」にあるファイルであり、「ワーキングディレクトリー」にあるファイルには差分は適用されません。
複雑な差分の適用は、「ステージングエリア」にあるファイルと「ワーキングディレクトリー」にあるファイルの相違点が大きくなり、後で混乱の元になりうるため、ユーザーが把握できる範囲内で作業を行ってください。
例えば差分適用後、「ワーキングディレクトリー」にあるファイルを「ステージングエリア」に追加すると、差分を適用した「ステージングエリア」のファイルは「ワーキングディレクトリー」にあるファイルで上書きされてしまいます。
結果、適用した差分が失われてしまいます。
差分の状態について
それぞれの差分の状態には、以下の3種類があります。- 差分の適用を決定した
- 差分の未適用を決定した
- 差分の適用・未適用は未決
1.差分の適用を決定した
ユーザーが差分の適用を決定し、実際に差分の適用を行った状態です。2.差分の未適用を決定した
ユーザーが差分の未適用を決定し、実際に差分の適用を行わなかった状態です。3.差分の適用・未適用は未決
ユーザーが差分を適用するかどうか決定していない状態です。コマンドの実行例
ここでは例として、「master.txt」ファイルに対して、差分の適用作業を行います。1.ステージングエリアにあるファイルの中身
「ステージングエリア」にある「master.txt」ファイルの中身は、以下のようになっています。2.ワーキングディレクトリーにあるファイルの中身
「ワーキングディレクトリー」にある「master.txt」ファイルの中身は、以下のようになっています。3.ワーキングディレクトリーの状態
「ワーキングディレクトリー」の状態を見ると、以下のようになっています。「master.txt」ファイルは、編集されたファイルであることが分かります。
「ワーキングディレクトリー」と「ステージングエリア」にある「master.txt」ファイルの中身が異なっていることが分かります。
4.コマンドの実行
コマンドのオプションは、以下のオプションを指定します。ショートオプション | ロングオプション |
---|---|
-p | --patch |
「端末」から、以下のコマンドを実行します。
コマンドの詳細は、「ステージングエリアにファイルを追加するコマンドの説明」を参考にしてください。
ポイントは、赤字の箇所です。
git add --patch master.txt
5.コマンドの実行結果
「ワーキングディレクトリー」にあるファイルと「ステージングエリア」にあるファイルの差分が作成され、その差分が表示されます。「-」は、「ステージングエリア」のファイルに存在するが、「ワーキングディレクトリー」のファイルに存在しない行を表しています。
「+」は、「ステージングエリア」のファイルに存在していないが、「ワーキングディレクトリー」のファイルに存在している行を表しています。
この差分をどう適用するのか選択肢が表示されるので、該当する選択肢に対応したキーを押します。
差分の適用に関する選択肢
差分の適用に関する選択肢です。選択肢 (キー) |
内容 |
---|---|
y | 現在表示している差分を適用し、次の差分を表示する |
n | 現在表示している差分を適用せず、次の差分を表示する |
q | 現在表示している差分を適用せず、残りの全ての差分も適用しない |
a | 現在表示している差分を適用し、残りの差分も適用する |
d | 現在表示している差分を適用せず、残りの差分も適用しない |
表示する差分の移動や検索に関する選択肢
表示する差分の移動や検索に関する選択肢です。選択肢 (キー) |
内容 |
---|---|
g | 差分の一覧を表示し、表示する差分を選択する |
/ | 差分を正規表現で検索し、該当する差分を表示する |
j | まだ適用を行っていない次の差分を表示する |
J | 次の差分を表示する |
k | まだ適用を行っていない前の差分を表示する |
K | 前の差分を表示する |
差分の分割や編集に関する選択肢
差分の分割や編集に関する選択肢です。選択肢 (キー) |
内容 |
---|---|
s | 表示している差分を分割して、異なる差分として扱う |
e | 表示している差分を編集する |
選択肢のヘルプ
選択肢のヘルプを表示します。選択肢 (キー) |
内容 |
---|---|
? | 選択肢のヘルプを表示する |