ファイルをインデックスに追加する(ステージング)

ステージングはコミットしたいファイルをインデックスに追加する操作です。 ステージングされたファイルがコミットの対象となります。

../../_images/0203.png

例として以下のような状況での操作を想定してみます。

../../_images/01029.png
作業ディレクトリには ファイルAファイルE があり、 ファイルDファイルE はフォルダに入っています。
ファイルB 以外は変更された状態です。

VSCodeかSource Treeでの操作が簡単だと思います。

コマンドライン(GitBash)を使用する方法

GitBashでローカルリポジトリを開いた状態を想定して行います。

基本のコマンド

ステージングは add コマンドを使用して行います。

基本のコマンドとしては以下のコマンドで指定したファイルをステージングします。

git add [ファイル名]
実際に ファイルA をステージングしてみましょう。
git add ファイルA を実行します。
../../_images/02027.png
git status でファイルの状況を確認してみましょう。
ステージングした ファイルA が「Changes to be committed」の欄に表示されていることがわかります。
../../_images/03026.png

同様に ファイルD もステージングして確認してみます。 ステージングした ファイルA が「Changes to be committed」の欄に移動しましたね。

../../_images/04021.png

ファイルをまとめてステージング

ディレクトリを指定したり、ワイルドカード使うことでファイルをまとめてステージングすることもできます。

ファイル全て

-A オプションを追加すると全ての変更や新規追加されたファイルを追加します。

# ファイルすべて
git add -A
../../_images/05019.png

変更のあったファイル全て(新規追加除く)

-U オプションでは -A と異なり新規追加されたファイルは追加されません。

# 変更のあったファイルすべて
git add -u
../../_images/06018.png

カレントディレクトリ内のファイル全て

コマンドを実行した時のカレントディレクトリ以下の全ての変更や新規追加されたファイルを全てステージングします。

# カレントディレクトリ内のファイル全て
git add .
../../_images/07019.png

指定したディレクトリ以下のファイル全て

指定したフォルダ以下の全ての変更や新規追加されたファイルを全てステージングします。

# 指定したディレクトリ以下の全て
git add [ディレクトリのパス]
../../_images/08017.png

ワイルドカードを使ったファイル指定

ワイルドカード * を使って任意のディレクトリのファイルをステージングします。

# 指定したディレクトリ直下のフォルダのワイルドカードで指定されたファイル
git add [ディレクトリのパス]/*.txt
../../_images/09014.png

ファイルの一部をステージング

-p または -patch オプションを使用することでファイルの変更箇所を一部だけステージングすることができます。

git add -p
# または
git add --patch

# ファイルを指定する場合
git add -p [ファイルのパス]
# または
git add -patch [ファイルのパス]

コマンドを実行すると、変更箇所の塊(Hunk)毎に差分が表示され、そこの区間の処理を聞かれるので、処理を選択していきます。

アクション

説明

y

ハンクをステージングする

n

ハンクをステージングしない

q

対話形式でのステージングを終了する(Quit)

a

現在のハンクと残りすべてのハンクをステージングする

d

現在のハンクと残りのハンクをステージしない

s

現在のハンクを更に小さなハンクに分割する

e

現在のハンクの範囲を手動で編集する

?

ヘルプを表示する

以下のような差分の ファイルC.md でためし1行目と7行目の変更のみをステージングしてみましょう。

../../_images/091.png

まずは以下のコマンドで対話モードを始めます。

git add -p ファイルC.md

表示されたハンクを見てみると、変更した箇所同士が近いので1つのハンクとGitに認識されています。

../../_images/092.png

なので、s と入力してハンクを更に小さく分割してもらいましょう。
いい感じに3つに分割されたようです。
../../_images/093.png

1行目と7行目だけステージングしたいので、ハンク(1/3)と(3/3)では y をハンク(2/3)では n を返していきます。 最後のハンクまで処理を行えばステージング完了です。全体を以下に示します。

../../_images/094.png

VSCodeを使用する方法

リポジトリをVSCodeで開いて、アクティビティバーからソース管理画面を開きます。
ソース管理画面では変更タブに変更等のあったファイルが表示されています。
../../_images/10010.png
  • ファイルにマウスカーソルを重ねると右側に出てくるアイコンの + をクリックするとステージングできます。

  • ファイルは CtrlShift を押しながら複数選択してステージングすることも可能です。

  • 「変更」にマウスカーソルを重ねて出てくる + をクリックすると全てのファイルをステージングできます。

../../_images/110.gif

指定した範囲のみステージングする

注釈

VSCodeの拡張機能「GitLens」の機能を使用します。

ファイルに複数の変更がある際に一部の変更だけをステージングすることができます。
  1. VSCodeのエディターでステージングしたいファイルを開きます。

  2. 変更された範囲(行)の行番号の右側にあるラインをクリックします。

  3. その箇所の変更の差分が表示されるので + アイコンを押してその範囲をステージングします。

../../_images/120.gif

SourceTreeを使用する方法

リポジトリをSource Treeで開いて :ファイルステータス 画面を開きます。
作業ツリーのファイル に変更等のあったファイルが表示されており、ファイルをクリックすると右側に変更の差分が表示されます。
../../_images/1307.png

  • ファイル名の右側の + をクリックするとそのファイルをステージングできます。

  • ファイルは CtrlShift を押しながら複数選択して 選択をインデックスに追加 でまとめてステージングすることも可能です。

  • 全てインデックスに追加 で全てのファイルをステージングできます。

../../_images/140.gif

指定した範囲のみステージングする

  1. ファイルを選択して右側に差分を開きます。

  2. 差分画面でステージングしたい変更の行を選択します。

  3. 選択した行をステージへ移動 をクリックします。

../../_images/1501.gif