【Git】git add: ステージする(索引に追加)コマンドとオプション

categories Git, IT関連 | Tags: | scot_exist | datetime 2011年1月8日 01:02 | コメントは受け付けていません。 | Save & Share

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」はファイル名として解釈されます。


入門Git-濱野-純-Junio-Hamano

ページTOPへ