まくまくGitノート
Git でファイルの変更をステージする(コミットの印をつける)
2010-07-17

変更をステージする(コミットの印を付ける)とは

Git では、git commit を実行する前に、ローカルリポジトリにコミットするファイルを指定しておく必要があります。この作業を「変更をステージする」といいます。 変更の内容により、以下のようなコマンドを使い分けます。

  • git add: 新規ファイルを追加、あるいは、既存ファイルを変更する場合。
  • git rm: 既存のファイルを削除する場合。
  • git mv: 既存のファイルの名前を変更、場所を移動する場合。

git add で新規ファイルの追加、既存ファイルの変更をステージする

Git では、リポジトリに新しいファイルを格納したい場合と、すでにリポジトリに格納されているファイルの変更を行いたい場合に、共通のコマンドとして git add を使用します。 実際にリポジトリに追加、変更を反映するには、その後で git commit を実行してコミットを行う必要があります。

$ git add aaa.txt
$ git commit -m "Add a sample file"

ちなみに、バージョン管理システムのひとつである Perforce では、編集用の通知には p4 edit、ファイル追加用の通知には p4 add と、コマンドが分かれています。 Perforce などの別の VCS に慣れている場合に注意しなければいけないのは、Git の変更管理単位はファイルではなく、もっと小さいハンク (Hunk) と呼ばれる変更部分単位だということです。 そして、それらのハンクがコミット対象として Git に伝わるのは git add コマンドを実行したタイミングです。 つまり、git add した後でそのファイルを変更してしまうと、その変更部分はステージされていないということになります。 結果として、そのファイルにはコミット対象の変更部分と、コミット対象ではない変更部分の両方が含まれる少しややこしい状態になります。 慣れないうちは、git add による変更のステージングは、git commit の直前に行うようにしてコミット漏れを防ぐとよいでしょう。

git rm でファイルの削除をステージする

次回のコミット時に、あるファイルをリポジトリから削除したい場合は、git rm コマンドでファイルを指定します。 このコマンドを実行した時点で、作業ツリーからは実際にファイルが削除されますが、git commit を実行するまではリポジトリには反映(コミット)されないことに注意してください。

$ git rm sample.txt
$ git commit -m "Remove unnecessary files"

git mv でファイルのリネームをステージする

次回のコミット時に、すでにコミットされているファイルの名前を変更したい場合は、git mv コマンドを使用します。 git mv コマンドを実行した時点で、作業ツリー内の実際のファイル名も変更されますが、その後でコミットすることを忘れないようにしてください。

$ git mv AAA.txt BBB.txt
$ git commit -m "Rename AAA and BBB"
2010-07-17