GitK
Gitk はグラフィカル リポジトリ ブラウザです。それはその種の最初のブラウザでした。これは git log
の GUI ラッパーであると見なすことができます。リポジトリの履歴を調べたり、視覚化したりするのに便利です。これは tcl/tk で書かれているため、オペレーティング システム間で移植可能です。gitk
は Paul Mackerras 氏によって Git コアとは別の独立したプロジェクトとして維持されています。安定バージョンは、エンドユーザーの利便性のために Git スイートの一部として配布されています。Gitk は Git を初めて利用する人にとって役に立つ学習補助になります。
Gitk の概要
Gitk は、バージョン管理経験がない人や、Subversion のような別のバージョン管理システムから移行する人にとって、役に立つ学習ユーティリティです。Gitk は Git コアにパッケージ化された便利なユーティリティです。Git の内部メカニズムを視覚化するのに役立つグラフィカル ユーザー インターフェイスを備えています。その他の人気のある Git GUI には、git-gui やアトラシアン独自の Sourcetree があります。
使用法
Gitk は git log
と同様に呼び出されます。gitk
コマンドを実行すると、以下のような Gitk UI が起動します。

左上のペインには、リポジトリへのコミットが表示され、最新のものが一番上に表示されます。右下には、選択したコミットによって影響を受けるファイルのリストが表示されます。左下のペインには、コミットの詳細と完全な差分が表示されます。右下のペインでファイルをクリックすると、左下のペインの差分が関連するセクションにフォーカスされます。
Gitk はリポジトリの現在の状態を反映しますブランチを変更するなど、別のコマンド ラインでリポジトリの状態を変更した場合、Gitk を再読み込みする必要があります。Gitk は、[File (ファイル)] メニュー -> [Reload (再読み込み)] で再読み込みできます。
既定では、Gitk は現在のコミットの履歴をレンダリングします。Gitk には、初期化時に渡すことができるさまざまなコマンド ライン オプションがあります。これらは主に Gitk のトップレベル ビューにレンダリングされるコミットのリストを制限するオプションです。これらのリビジョン オプションを使用した一般的な実行形式は次のとおりです。
オプション
gitk [<options>] [<revision range>] [--] [<path>…]
<revision range>
"
の形式のリビジョン範囲を渡すことで、
と
の間のすべてのリビジョンを表示できます。または、1 つのリビジョンを渡すことができます。
<path>…
コミットを特定のファイル パスに制限します。パスをリビジョン名から切り離すには、"--" を使用して、先行するオプションからパスを分離します。
--all
すべてのブランチ、タグ、参照を表示します。
--branches[=<pattern>] --tags[=<pattern>] --remotes[=<pattern>]
選択した項目 (ブランチ、タグ、リモート) が、メインラインのコミットであるかのように表示されます。
を渡すと、指定したパターンにマッチするよう ref がさらに限定されます。
--since=<date>
指定した日付より新しいコミットをレンダリングします。
--until=<date>
指定した日付より古いコミットをレンダリングします。
--date-order
コミットを日付順に並べ替えます。
--merge
マージ中に特定された競合ファイルを変更するコミットを表示します。
--left-right
コミットが差分のどちら側からのものかを示す情報ラベルをレンダリングします。左側からのコミットには < 記号、右側からのコミットには > 記号が先頭に付きます。
--ancestry-path
表示するコミットの範囲 (例: commit1.. commit2 または commit2 commit1
) を指定した場合、commit1
と commit2
の間の祖先チェーンに直接存在するコミット、つまり commit1
の子孫であり、かつ commit2
の祖先であるコミットのみが表示されます。(詳しい説明は git-log
(1) の "履歴の簡略化" を参照してください。)
L<start>,<end>:<file>
特定のコード行番号範囲の履歴を追跡できる強力なオプション。
説明と例
Gitk で価値ある出力を提供するためには、基盤となるリポジトリにコミット履歴が必要です。次のコードは、コミットがあり、1 つにマージされた 2 つのブランチを持つ新しいリポジトリを作成する、bash コマンド シーケンスです。
mkdir gitkdemo &&
cd gitkdemo &&
git init . &&
echo "hello world" > index.txt &&
git add index.txt &&
git commit -m "added index.txt with hello world content"
このデモ リポジトリは、Gitk で調べる良い例となるでしょう。このコマンド シーケンスでは、1 つのコミットと index.txt
ファイルを含む新しいリポジトリが作成されます。それでは、gitk
を呼び出してリポジトリを調べてみましょう。

Gitk では 2 つのコミットを比較できますか?
デモ リポジトリを続けて、追加のコミットを作成しましょう。
echo "prpended content to index" >> index.txt &&
git commit -am "prepended content to index"
先行するコマンドが実行されたら、gitk
を再読み込みする必要があります。コマンド ラインから gitk
を再読み込みするか、GUI を使用して [File (ファイル)] -> [Reload (再読み込み)]
に移動します。再読み込みすると、新しい commit
が表示されます。

main
ブランチ ref が新しいコミットを指しているのがわかります。これら 2 つのコミットを比較するには、左上の履歴パネルを使用します。履歴パネルで、差分のベースとなるコミットをクリックします。選択したら、2 つ目のコミットを右クリックしてコンテキスト メニューを開きます。

このコンテキスト メニューには次のオプションがあります。
Diff this -> selected
Diff selected -> this
これらのオプションのいずれかを選択すると、左下のペインに 2 つのコミットの差分が表示されます。この例では以下のようになります。

差分の出力は、index.txt
に 2 つのコミットの間に "prepended content to index" という新しい行が追加されたことを示しています。
Gitk を使用して 2 つのブランチを比較する方法
サンプル リポジトリを続けて、新しいブランチを作成しましょう。
git checkout -b new_branch &&
echo "new branch content" > new_branch_file.txt &&
git add new_branch_file.txt &&
git commit -m "new branch commit with new file and prepended content" &&
echo "new branch index update" >> index.txt &&
git commit -am "new branch commit to index.txt with new content"
この後のコマンド シーケンスでは、new_branch
という名前の新しいブランチが作成され、そこに new_branch_file.txt
というファイルが追加されます。さらに、index.txt
に新しいコンテンツが追加され、その更新のために追加のコミットが行われます。これで、main より 2 コミット先の新しいブランチができました。これらの変更を反映するには Gitk を再読み込みする必要があります。

これは Git のブランチ メカニズムについて説明する絶好の学習機会です。Gitk では、コミットはコミットの直線シーケンスとして表示されます。ブランチという用語は、タイムラインに「ブランチ」またはフォークが予期されていることを意味します。Git ブランチは他のバージョン管理システムとは異なります。Git ではブランチはコミットを指すポインタです。ブランチを作成すると、ポインタがコミットに移動します。git ブランチを作成しても
、リポジトリやソースツリーの構造は変わりません。新しいポインタを作成しているだけです。
2 つのブランチ間で異なるコミットを比較するには、Gitk を指定したリビジョン範囲で起動する必要があります。gitk main.. new_branch
を実行すると、2 つのブランチ参照間のコミットだけで Gitk が開きます。

これは、ブランチを比較するための強力なユーティリティです。
Gitk と Git Gui
Git Gui は、Git に対するもう 1 つの Tcl/Tk ベースのグラフィカル ユーザー インターフェイスです。Gitk はリポジトリの履歴のナビゲートと視覚化に焦点を当てていますが、Git Gui は個々のコミット
や単一のファイル注釈の向上に焦点を当てており、プロジェクト履歴は表示しません。Git Gui には、履歴探索のために Gitk を起動するためのメニュー アクションも用意されています。Git Gui は、git gui
を実行することでコマンドラインからも呼び出されます。
Gitk のまとめ
結論として、Gitk は git log
のグラフィカル インターフェイス ラッパーです。Gitk は、リポジトリの履歴を視覚化して探索することに関して非常に強力です。Gitk は Git の内部構造を学ぶのにも役立つツールです。