skillup

技術ブログ

Git

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

投稿日:2015年12月8日 更新日:

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

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

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

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

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

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

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

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

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

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

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

コミットをしますと、

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

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

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

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

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

git add ファイル名

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

git ls-files

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

git ls-files

git rm

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

gitの管理対象から特定のファイル、ディレクトリを削除する

.gitignore

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

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

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

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

.gitignoreでインデックスに登録したくないファイルを指定する

git status

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

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

ステージングの変更を確認する

修正したファイルをGitでインデックスに追加してみる

git addでステージングしたファイルをアンステージング(キャンセル)する

git reset

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

git reset がわからない

git-resetは結局何を戻すのか

git checkout

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

コツ

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

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

参考リンク

Git初心者に捧ぐ!Gitの「これなんで?」を解説します。

はじめてgitをつかったのでコマンドを復習します

Git の基礎勉強 〜Git によるバージョン管理を使う〜

-Git
-

執筆者:


comment

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

関連記事

no image

gitの紹介と基本的な使用法について

Contents1 旧来のソース管理方法2 バージョン管理ツール2.1 バージョン管理とは?2.2 有名なバージョン管理ソフト3 Gitの基本的な使用法3.1 初期化(git init)3.2 基本的 …

no image

gitのfetch/merge/rebaseについて

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

no image

Gitのブランチについて

ちょっといろいろと触っているGitに関して。 前回は作業ディレクトリ、インデックス、コミットについて説明したのですが、今回はブランチについて行います。 Contents1 ブランチとは?2 ブランチに …

no image

Git+SSH鍵認証

鍵認証をともなったgitのpushやpullについて。 中央リポジトリに公開鍵がおいてあり、リモートリポジトリに秘密鍵を配置します。 ステップとしては以下の2ステップになります。実行時ユーザーのディレ …

no image

Git→Jenkinsの連携

気がついたら投稿数が50超えてましたね。 ガチンコ塾とあわせて更新してますが、2ヶ月ちょいなので結構いいペースで更新しているかと思います。 大切なのはこれを継続できるかですね。ただ、ガチンコ塾に比べる …