作業ツリーやブランチを操作・管理するコマンド
リポジトリに新たにファイルを追加したり、変更を加えたファイルを指定するのに利用するコマンドが「git add」だ。どのファイルが追加/変更されたのかは、「git status」で確認できる。git statusを実行すると、次の例のように追加/変更されたファイルの情報が表示される。
$ git status # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # # modified: HBPreferencesTransFormer.h # modified: HBPreferencesTransFormer.m # no changes added to commit (use "git add" and/or "git commit -a")
特定のファイルにどのような変更が加えられたかは「git diff」コマンドで確認できる。
$ git diff <変更を確認したいファイル>
変更点を保存するには、git addコマンドで対象とするファイルを指定したのちに「git commit」コマンドを実行する。
$ git add <追加/変更したファイル1> <追加/変更したファイル2> ... $ git commit
また、git commitを「-a」オプションを付けて実行すると変更が加えられたファイルを自動検出してコミットできる。ただし、この場合新規に作成されたファイルはコミット対象にはならない。
$ git commit -a
通常、git commitコマンドを実行するとエディタが起動してコメントメッセージの入力が求められる。エディタを起動したくない場合は「-m」オプションでメッセージを指定すればよい。
$ git commit -m "<コミットメッセージ>"
「git log」でリポジトリのコミットログを閲覧できる。コミットログは新しいものから順に表示され、次の実行例のようにそれぞれのコミットについてそのコミットを表すハッシュ値とコミット者、タイムスタンプ、コメントが表示される。
$ git log
commit 0b70750bdf9b02597741301c695ff46bc75036d4
Author: hoge <hoge@users.sourceforge.jp>
Date: Thu Mar 12 19:47:31 2009 +0900
Cleaning codes and convert TAB to space.
commit 769735fbce0a0a23a2b7547003d43518b4ec96f3
Author: hoge <hoge@users.sourceforge.jp>
Date: Thu Mar 12 19:43:09 2009 +0900
Cleaning code, and add comments
:
:
CVSやSubversionではコミットを「リビジョン」という数値で管理するが、Gitの場合コミットをハッシュ文字列で管理している。たとえば特定のファイルをその過去のバージョンと比較する、といった場合、どのバージョンのファイルと比較するかはハッシュ文字列で指定する。なお、ハッシュ文字列でコミットを指定する場合、必ずしもすべてを入力する必要はなく、そのコミットを一意に特定できる先頭数桁を入力すれば良い。
また、コミットの指定はハッシュだけでなく後述の「ショートネーム」と呼ばれるエイリアスのようなもので指定することも可能だ。
コミット後に小さなミスなどに気付いた場合などに便利なのが「git reset」だ。たとえばコミット後に「git reset --soft HEAD^」と実行すると、直前に行ったコミットを取り消すことができる。
$ git reset --soft HEAD^
この場合、作業ツリーの内容はコミット時のままで「コミットした」ということだけが取り消される。もし作業ツリーに加えた変更点までも取り消したい場合は、「--soft」の代わりに「--hard」を指定すればよい、
また、コミットされていた内容は「ORIG_HEAD」という名前で参照できる。これを利用して、次のように実行することで現在の状態とコミットされていた状態の差分を表示できる。
$ git diff ORIG_HEAD
修正後に再度コミットを行うには、下記のようにする。これを実行すると、先に入力したコミットメッセージを再編集してコミットが行える。
$ git commit -a -c ORIG_HEAD
なお、git commitに「--amend」オプションを付けて実行することで、直前に行っていたコミットを訂正することができる。
$ git commit (コミット後にミスに気付き、ミスを修正) $ git commit --amend (先に行ったコミットが、ミスを修正したものに置き換えられる)
上記の操作は、次のような操作とほぼ同一の働きをする。
$ git commit $ git reset --soft HEAD^ (コミット後にミスに気付き、コミットを取り消し) (ミスを修正) $ git commit -c ORIG_HEAD
「git revert」は作業ツリーを指定したコミット時点の状態にまで戻し、コミットを行うコマンドである。引数にはコミットを指定するハッシュ文字列もしくはタグ名などを指定する。
$ git revert <コミット名>
git revertはgit resetと似ているが、作業ツリーを差し戻したという情報が作業履歴に残るのが異なる点だ。
