gitを使い始めてしばらくたちますが、まだ明確なイメージがつかめていないです(汗)
みようみまねでやっていて、ポイント、ポイントで困ったことは検索してなんとか対応してきましたが、体系的な理解ができていなことが大きいかなと思います。
そこで今回は個別のポイントではなく、gitの仕組み(作業ディレクトリ、インデックス、HEADなど)についてメモしておきたいと思います。
Contents
作業ディレクトリ、インデックス、HEAD
gitではファイルの履歴を登録する場合、大きく分けるとファイルの状態は3つあります。
1つ目は作業ディレクトリ(Working Directory)と呼ばれます。
これは作業者が普段、触っているファイル群のことです。
次にコミットする前段階としてインデックスという状態があります。
gitの場合、作業ディレクトリのファイルをいきなり、履歴管理するのではなくこのインデックスといわれる状態に登録しておきます。(git addで登録できます。)
しかし、インデックスに状態を登録してあるファイル群は言ってみれば仮登録のような状態です。
これを本登録するためにはコミット(git commit)といわれる処理を行います。
コミットをしますと、
- その時に記録された時間
- 記録されたファイル
- 前回のコミットとの差分
- 登録者
- その時のコミットを識別するための文字
などの情報が追加されます。
基本的にファイルの履歴とはこのコミットの履歴のことをいいます。また最新のコミットのことをHEADと呼びます。
上記が基本的な流れです。要は作業フォルダ→インデックス→コミットという流れをおっていけばいいのですが、複雑になってくるとこれが混乱したりします。
以下によく使われるコマンドを列挙します。
git add ファイル名
最もよく使われるコマンドですが、これは作業ディレクトリにあるファイルをインデックスに登録するコマンドです。
git ls-files
インデックスに登録されているファイルの一覧を見たい場合です。様々なオプションがあり、見れる状態をカスタマイズできます。(下記リンク参照)
git rm
間違ってindexに登録したファイルなどを削除するときに行うコマンドです。これも作業ディレクトリのファイルは残しておき、インデックスだけに登録しないなどさまざまなオプションがあります。(下記リンク参照)
.gitignore
コマンドではないですが、インデックスに登録しないファイルを登録しておきます。
例えばバイナリ系のファイル、一時的なログファイルなどがそれに当たります。
ここに記述しておくと以降はgitの管理対象外となり、git addを加えても追加されません。
なおこのファイルに記述する前にaddで登録してしまった場合は先ほどのgit rmを使います。
.gitignoreでインデックスに登録したくないファイルを指定する
git status
現在のファイルの状態がどうなっているかを教えてくれるコマンドです。
下記のようなメッセージがでることが一般的です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# On branch master # Changes to be committed: #(コミットされる予定のファイルです。作業ディレクトリとインデックスに差分がない状態です。) # (use "git reset HEAD ..." to unstage) # # modified: sample.txt # # Changes not staged for commit: (作業ディレクトリとインデックスに差分が発生しています。) # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in 作業ディレクトリ) # # modified: sample2.txt # # Untracked files: (管理対象外です。主に作成したばかりでまだaddしていないファイルやgit rmを行わずにファイルが 削除された場合このメッセージが表示されます。) # (use "git add ..." to include in what will be committed) # # sample3.txt |
git addでステージングしたファイルをアンステージング(キャンセル)する
git reset
gitの操作をやり直すコマンドです。といっても複数のオプションがありますが、例えばインデックスに登録したファイルを取り消したり、コミット自体をとりけすなどです。
git checkout
通常はブランチを切る場合に使いますが、作業ファイルを任意のバージョンに戻すときにも使えます。
コツ
わかりにくい場合は作業ディレクトリ、インデックス、HEADの状態をノートなどにかいてみるとよいかもしれません。
それを数回繰していき感覚をつかんでいく必要がありますね。
参考リンク