skillup

技術ブログ

Git

gitの作業ディレクトリ・インデックス・HEADに関して

投稿日:

gitを使い始めてしばらくたちますが、まだ明確なイメージがつかめていないです(汗)

みようみまねでやっていて、ポイント、ポイントで困ったことは検索してなんとか対応してきましたが、体系的な理解ができていなことが大きいかなと思います。

そこで今回は個別のポイントではなく、gitの仕組み(作業ディレクトリ、インデックス、HEADなど)についてメモしておきたいと思います。

作業ディレクトリ、インデックス、HEAD

gitではファイルの履歴を登録する場合、大きく分けるとファイルの状態は3つあります。

1つ目は作業ディレクトリ(Working Directory)と呼ばれます。

これは作業者が普段、触っているファイル群のことです。

次にコミットする前段階としてインデックスという状態があります。

gitの場合、作業ディレクトリのファイルをいきなり、履歴管理するのではなくこのインデックスといわれる状態に登録しておきます。(git addで登録できます。)

しかし、インデックスに状態を登録してあるファイル群は言ってみれば仮登録のような状態です。

これを本登録するためにはコミット(git commit)といわれる処理を行います。

コミットをしますと、

  • その時に記録された時間
  • 記録されたファイル
  • 前回のコミットとの差分
  • 登録者
  • その時のコミットを識別するための文字

などの情報が追加されます。

基本的にファイルの履歴とはこのコミットの履歴のことをいいます。また最新のコミットのことをHEADと呼びます。

上記が基本的な流れです。要は作業フォルダ→インデックス→コミットという流れをおっていけばいいのですが、複雑になってくるとこれが混乱したりします。

以下によく使われるコマンドを列挙します。

git add ファイル名

最もよく使われるコマンドですが、これは作業ディレクトリにあるファイルをインデックスに登録するコマンドです。

git ls-files

インデックスに登録されているファイルの一覧を見たい場合です。様々なオプションがあり、見れる状態をカスタマイズできます。(下記リンク参照)

http://qiita.com/zimathon/items/d964c4b3cc688cb2d114

git rm

間違ってindexに登録したファイルなどを削除するときに行うコマンドです。これも作業ディレクトリのファイルは残しておき、インデックスだけに登録しないなどさまざまなオプションがあります。(下記リンク参照)

http://qiita.com/ytkt/items/a2afd6be8e4f06c1ea25

.gitignore

コマンドではないですが、インデックスに登録しないファイルを登録しておきます。

例えばバイナリ系のファイル、一時的なログファイルなどがそれに当たります。

ここに記述しておくと以降はgitの管理対象外となり、git addを加えても追加されません。

なおこのファイルに記述する前にaddで登録してしまった場合は先ほどのgit rmを使います。

http://rfs.jp/server/git/gitignore.html

git status

現在のファイルの状態がどうなっているかを教えてくれるコマンドです。

下記のようなメッセージがでることが一般的です。

https://www.atlassian.com/ja/git/tutorial/git-basics#!status

http://linux.keicode.com/prog/git-staging.php

http://d.hatena.ne.jp/yk5656/20140219/1393755769

http://d.hatena.ne.jp/mrgoofy33/20100910/1284068244

git reset

gitの操作をやり直すコマンドです。といっても複数のオプションがありますが、例えばインデックスに登録したファイルを取り消したり、コミット自体をとりけすなどです。

http://qiita.com/annyamonnya/items/d845597606fbabaabcad

http://qiita.com/fnobi/items/ec036c1b5d7ee5a8517c

git checkout

通常はブランチを切る場合に使いますが、作業ファイルを任意のバージョンに戻すときにも使えます。

コツ

わかりにくい場合は作業ディレクトリ、インデックス、HEADの状態をノートなどにかいてみるとよいかもしれません。

それを数回繰していき感覚をつかんでいく必要がありますね。

参考リンク

http://kray.jp/blog/git-why-explanation/

http://kray.jp/blog/review-git-commands/

http://tracpath.com/bootcamp/learning_git_firststep.html

-Git
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

githubのremoteリポジトリへの登録

githubにgit pushしようとしたときにエラーがでたんでちょっとメモ。 githubに登録する場合、設定が適切でないと、

など …

no image

最新版のgitをソースから&git diffおさらい

Contents1 gitをソースから2 git diff gitをソースから gitはyumから入れてもいいんですが、バージョンが古かったりすると機能がいろいろと制限されるなどのデメリットもあります …

no image

gitのfetch/merge/rebaseについて

git使って結構立ってるんですがいまだに仕組みがややこしく結構難しいなあと感じています。 基本的な使い方は以前紹介した「gitの紹介と基本的な使用法について」でいいと思います。 開発をやっていますと一 …

no image

Gitデタッチ、インデックス、プッシュなど

まとまってませんが、Gitであったトラブルについてのメモです。 Contents1 デタッチ状態2 インデックス一覧&削除2.1 インデックスの一覧2.2 インデックスから取り除くとき3 git pu …

no image

gitのfetch/merge/rebaseについて その2

以前、gitのfetch/mergeについての記事を書きましたが、理論的なことは書いてあっても実際に処理の流れをかいていなかったので、今回はそのことについてメモリます。 Contents1 競合が起き …