とあるファイルについて、git status
で表示される状態と、実際のファイルの状態(存在性,内容)の対応を表にしてみる。
その都度考えれば分かることではあるが、まとめると何かに便利かも。。。
言葉や記号の定義は下のセクションに述べる。
status | 作業ディレクトリ | インデックス | HEAD | ||
---|---|---|---|---|---|
Untracked | ◯ | × | ー | ||
tracked | Unstaged | modified | ◯' | ◯ | ー |
deleted | × | ◯ | ー | ||
staged | new file | ー | ◯ | × | |
modified | ー | ◯' | ◯ | ||
deleted | ー | × | ◯ |
renamed
ステータスについては詳しくはよくわかってないので表には書かなかった。おそらくtreeオブジェクトが変更されたことを表すのではないかと想像する。
定義
git status
で Changes to be committed:
に表示される状態をstaged、
Changes not staged for commit:
に表示される状態をUnstagedと呼ぶことにする。
以下の記号を使う。
各領域(作業ディレクトリ、インデックス、HEADコミット)にファイルか存在するかどうか | 記号 |
---|---|
存在 | ◯ |
不在 | × |
存在して、' 無しの◯と内容に差異あり | ◯' |
存在不在問わない | ー |
特徴
- 作業ディレクトリとインデックスの比較によってUnstagedなステータスが決まる
- インデックスとHEADの比較によってstagedなステータスが決まる
- Untrackedファイルを
add
するとstaged new fileになるので、Unsteged new fileというステータスは無い。
例
status | 作業ディレクトリ | インデックス | HEAD |
---|---|---|---|
Unstaged modified, staged modifide | ◯’’ | ◯’ | ◯ |
Unstede deleted, staged new file | × | ◯ | × |
staged deleted | × | × | ◯ |
staged modified | ◯' | ◯' | ◯ |
clean | ◯ | ◯ | ◯ |
clean | × | × | × |
Untracked, staged deleted | ◯ | × | ◯ |