【Git】git add: ステージする(索引に追加)コマンドとオプション
Warning: getimagesize(http://images.amazon.com/images/P/4798023809.09.THUMBZZZ.jpg) [function.getimagesize]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /var/www/html/blog/wp-content/plugins/simple-amazon/include/sa_generate_html_class.php on line 137
コンテンツをステージするコマンド(git add)
今回はコンテンツをステージするコマンド「git add」に焦点を絞って解説したいと思います。
Gitでは、コミット(git commit)を実行する前にステージ(索引に追加)する必要があります。
簡単な流れとしては次のようになるかと思います。
$ git add testfile $ git commit
オプション一覧
Gitのコマンドにはサブオプションが多数存在します。
その中でも特に利用頻度が高そうなものを紹介していきたいと思います。
ショートオプション | ロングオプション | 説明 |
<filepattern>… | 追加するファイル名を指定します。 | |
-n | –dry-run | 追加されるファイル名を表示します。実際には追加されません。 |
-f | –force | 無視ファイル(.gitignore)を無視して追加します。 |
-u | –update | 既にGit管理下にあるファイルの内、変更点のあるものだけをステージします。 |
-A | –all | -uの挙動に加え、.gitignore で無視されていないファイルをステージします。 |
-N | –intent-to-add | 後にステージされる事を記録します。git diff を使った場合、差分表示が行えます。 |
–(ハイフン2つ) | オプションとファイルを明示的に切り分けます。例えば「-n」という名前のファイルをステージする場合に利用します。 |
使用例
<filepattern>
一つのファイルを指定
$ git add testfile
複数のファイルを指定
$ git add testfile1 testfile2 testfile3
ドット「.」指定
$ git add .
カレントディレクトリ配下すべてステージする。
この時、.gitignoreで指定されたファイル以外のすべてのファイルをステージします。
ファイルグロブ「例えば: *.c」
次のようなファイル構成の場合
a.c abc.c b.c test/ test/c.c test/d.c
$ git add *.c
追加されるのは
a.c abc.c b.c
の3つになります。
-n, –dry-run: 追加されるファイル名だけ出力する(実際に追加はされない)
$ git add testfile -n add 'testfile'
-f, –force: 無視ファイル(.ignore)さえも無視してステージする
次のようなファイル構成の場合
testfile1 testfile2 .gitignore
.gitignoreの中身
testfile2
「-f」オプションを指定してステージする
$ git add . -f
追加されるファイルは
testfile1 testfile2 .gitignore
のすべてのファイル。
「-f」を指定しないと下記のようなファイルだけ追加されます。
testfile1 .gitignore
-u, –update: 既にGit管理下にあるファイルの内、変更点のあるものだけをステージする
次のようなファイルの状態の場合
testfile1 Git管理下で変更なし testfile2 Git管理下で変更あり testfile3 Git管理下ではない
$ git add -u
testfile2 だけがステージされます。
-A, –all: "-u"の挙動に加え、Git管理下になく、.gitignore で無視されていないファイルもステージする
次のようなファイル構成の場合
testfile1 Git管理下で変更なし testfile2 Git管理下で変更あり testfile3 Git管理下ではない testfile4 Git管理下ではない .gitignore
.gitignoreの中身
testfile3
$ git add -A
次のファイルがステージされます。
testfile2 testfile4
-N, –intent-to-add: 後でステージされる事を記録する
git diff を使った場合、差分表示が行えます。
次のようなファイル構成の場合
testfile1 Git管理下ではない
比較すると
$ git diff
Git管理下ではないため、比較しようとしても何も出力されません。
また次のように
$ git add testfile1 $ git diff
としても、同様に比較する事が出来ません。これはaddしたとしても、まだコミットされていない状態のため、Gitとしては比較できないためです。
次のようにする事で、git diff コマンドで比較する事が出来ます。
$ git add testfile1 -N $ git diff : +testdata1
また、git commit -a を行う場合にも有効なオプションです。
–(ハイフン2つ): オプションとファイルを明示的に切り分けます。
次のようなファイル構成の場合で且つ「-n」だけをステージしたい場合
-n ←ファイル名 testfile1
単純に次のようなコマンドを発行してもGitとしては「-n」オプションなのか、ファイル名の「-n」なのか判断出来ません
$ git add -n Nothing specified, nothing added. Maybe you wanted to say 'git add .'?
「-n」オプションとして解釈されてしまい、ファイルが不正として扱われてしまいます。
こんな時はオプションと、ファイルを明示的に切り分けて指定します。
$ git add -- -n
「–(ハイフン2つ)」以降はファイル(正確には引数)として扱われるため、ここでいう「-n」はファイル名として解釈されます。