🐧 Linux 総合学習プラットフォーム
Git バージョン管理 ・ 入門

状態と履歴を確認する(status / log)

いまどのファイルが変更され、何がステージに載っているかは git status で確認します。これは作業中に最もよく使うコマンドで、迷ったらまず status を打つのが鉄則です。これまでのコミットの流れは git log でたどれ、誰がいつ何を記録したかが新しい順に並びます。git log --oneline を使うと1コミット1行に圧縮され、全体像をつかみやすくなります。

Git を使っていると、いつの間にか「いま自分がどこにいるのか」を見失う。それを防ぐ羅針盤が、状態を見る git status と、履歴をたどる git log の2つだ。

💡
ポイントgit status は「いまどうなっているか」、git log は「これまで何をしてきたか」を見る。どちらも履歴を壊さない安全なコマンドだ。

Git ではファイルが作業ツリー・ステージング・リポジトリの3つの領域を行き来する。だから「いま何がどの段階にあるのか」が頭の中だけでは追えなくなる。そこで、現在の状態を教えてくれる status と、これまでの記録の流れを見せてくれる log を、こまめに確認しながら作業を進める。

この2つは履歴を書き換えたりファイルを壊したりしない「見るだけ」のコマンドだ。迷ったら何度打っても安全で、むしろ操作の前後に挟むほど事故が減る。

🧭 足元を確かめる git status

git status は、3つの領域がいまどうなっているかをまとめて教えてくれる、最もよく使うコマンドだ。

何か操作して結果に確信が持てないとき、次に何をすべきか分からなくなったとき、まず status を打つ。これが Git を扱ううえでの鉄則だ。

git status ……Untracked files(未追跡)・Changes to be committed(ステージ済み)・Changes not staged for commit(未ステージ)に分けて状態を一覧する。

status の出力はいくつかの見出しに分かれる。まだ Git が追跡していない新しいファイルは「Untracked files」、git add 済みで次のコミットに含まれる変更は「Changes to be committed」(git-staging に載った状態)、編集したけれどまだ add していない変更は「Changes not staged for commit」として並ぶ。

何も変更がなければ「nothing to commit, working tree clean」と表示される。これは「手元はきれいで記録すべき変更が一つもない」状態を意味する。

💬 status は次の一手も教えてくれる

status は、状態を見せて終わりではない。次にどう操作すればよいかのヒントも出してくれる。

たとえば編集しただけのファイルがあると「git add でステージに載せる」よう促し、ステージ済みの変更があると「git restore --staged で降ろせる」と案内する。

コツGit のメッセージには次の一手がそのまま書いてある。英語でも構えずに読むと、git add すべきか git restore --staged すべきかが分かる。

Git のメッセージは初学者にも分かるよう書かれている。英語でも構えずに読んでみると、次の一手がそのまま書いてあることに気づく。

慣れるまでは、編集したら status、add したら status、commit したら status、というくらい頻繁に挟んで構わない。

📋 短い形式 git status -s

出力が長くなりがちなときは、git status -s(または --short)が便利だ。

-s を付けると1ファイル1行の短い形式になり、行頭の2文字の記号で状態を表す。左側の文字がステージングの状態、右側が作業ツリーの状態を示す。

AMreadme.txt左=ステージング右=作業ツリー?? = 未追跡A = 追加M = 変更
git status -s(または --short)……1ファイル1行で表示。?? は未追跡、A はステージ追加、右側の M は未 add の変更を表す。

たとえば ?? は未追跡のファイル、A はステージに追加された新規ファイル、 M(右側のM)は変更したがまだ add していないファイル、を意味する。

ファイル数が多いプロジェクトでは、この短い形式のほうが全体を一覧しやすく、慣れると素早く状況をつかめる。

📜 来し方をたどる git log

足元が分かったら、次は「これまで何をしてきたか」だ。これまでに積み重ねたコミット(git-commit)の流れを見るのが git log である。

実行すると、コミットが新しい順に上から並び、それぞれのハッシュ・作者・日時・コミットメッセージが表示される。ただし既定の表示は1コミットあたりの情報が多く、数が増えると全体像がつかみにくくなる。

git log --oneline ……1コミットを「短いハッシュ+メッセージ」の1行に圧縮して並べる。履歴の流れをひと目で見渡せる。

そこで日常的によく使うのが git log --oneline だ。これは1つのコミットを「短いハッシュ+メッセージ」の1行に圧縮して並べるので、履歴の流れをひと目で見渡せる。

たとえば「e4f5g6h Add second line」「a1b2c3d Add readme」のように、上が新しく下が古い順で表示される。この一覧こそが、Git でいう「履歴」の正体だ。

🌿 枝の分岐を地図にする

枝が分かれていると、一覧だけでは「どこで分かれてどこで合流したか」が見えてこない。それを地図のように描く組み合わせがある。

git log --oneline --graph --all と打つと、--graph がブランチの枝分かれと合流を左側にアスキーアートの線で描き、--all がすべてのブランチを対象に含める。

git log --oneline --graph --all ……--graph が枝分かれと合流を線で描き、--all がすべてのブランチを対象にする。マージ前後で打つと状況が見える。

枝(git-head が指す現在位置を含む各ブランチ)が複数あるときに、その分岐と合流を見渡せるので、マージの前後で打つと状況把握に役立つ。

なお、いま自分がどのコミットを基準にしているかは HEAD(git-head)という印が指し示している。log の出力でも、最新のコミットのそばに HEAD が表示される。

🚪 全画面で固まったときの抜け方

git log を実行したら画面が全画面に切り替わり、入力を受け付けなくなることがある。慌てなくていい。

履歴が長い場合、最終行にコロン(:)が出て入力を待ち受ける状態になる。初学者は「固まった」と勘違いしがちだが、これはページャ(less と同じ仕組み)が動いているだけだ。

つまずきlog で全画面になり固まったように見えても、それはページャ(less)。スペースで次へ、上下キーでスクロール、q で抜けられる。

スペースキーで次のページへ進み、上下キーで1行ずつスクロールできる。読み終えたら q キーを押せば抜けられる。

この操作感は less でファイルを読むときとまったく同じだ。片方を覚えればもう片方にもそのまま通じる。

↔ status と log の使い分け

status と log は、役割を分けて考えると迷わない。

status は「これから何を記録すべきか・今どの段階にいるか」という現在の作業状況を見るために使う。log は「これまで何をしてきたか」という過去の流れをたどるために使う。

たとえば、コミットする前には status で含める内容を確認し、過去のある変更がいつ入ったのかを調べたいときは log --oneline でメッセージを目で追う。バグがいつ混入したかを探すときも、まず log で怪しいコミットの見当をつけるところから始まる。

コツgit log --oneline -- <ファイル名> とすると、そのファイルに関係するコミットだけに絞って履歴を追える。

特定のファイルがどう変わってきたかだけを追いたいときは git log --oneline -- <ファイル名> のようにファイルを指定すると、そのファイルに関係するコミットだけに絞れる。

この2つを息をするように打てるようになると、Git の上での見通しが一気に良くなる。まず status で足元を確かめ、log で来し方を振り返る。この往復が、Git を安心して使うための基本のリズムだ。

この項目に出てくる用語

ステージングすてーじんぐ
コミット前に変更を載せておく準備エリア。インデックスとも呼ぶ。
コミットこみっと
変更を1つの履歴として確定する操作、またはその記録1件。
HEADへっど
いま自分が見ている(作業中の)コミットを指す印。

関連コマンド

git statusgit log

▶ 学習アプリでこの続きを学ぶ・演習する