GitのGUIの使い方|同梱の2つと第三者製の選び分け

git gui 使い方で検索すると、まったく違う3つの話が同じ言葉で混ざって出てくる。1つはGitに同梱されている git gui というコマンドの話、1つは同じく同梱の gitk の話、もう1つはSourceTreeやGitHub Desktopのような第三者製のクライアント全体を指した話だ。手が止まる原因は操作の難しさではなく、どれの話をしているのか分からないまま手順をたどってしまうところにある。同梱の2つは役割がはっきり分かれているので、そこを先に押さえると、第三者製を選ぶ基準も自然に決まる。

同梱のGUIは2つあり、役割が分かれている

Gitには、履歴を見るための画面と、コミットを作るための画面が別々に付いてくる。公式の解説書はこう書いている。

Gitをインストールすると、ビジュアルツール gitk および git-gui が使えるようになります。 出典: git-scm.com

同じ資料は、この2つを「タスク指向のツール」の例として挙げている。それぞれ履歴の表示とコミットの作成という特定の目的に合わせて作られており、その作業に要らない機能は省かれている、という説明だ。だから片方だけ使って「機能が足りない」と感じるのは、役割の外を求めているということになる。

Macで注意が要るのはここだ。Appleが配っているGitには、この2つが同梱されていない。Git公式のmacOS向けの案内は、git-gui と gitk を入れたい場合はHomebrewを使う手順として、brew install git-gui を別に案内している。つまりMacでは、git gui と打っても反応がないことがあり、それは設定の失敗ではなく配布物の違いだ。同じページには入れ方が3つ並んでいて、Homebrewで本体を入れている人なら追加は1行で済む。

そのうえで公式の解説書は、Gitが端末をネイティブ環境としている点も明記している。新機能はまずコマンドラインから使えるようになり、機能の全部を思い通りに使えるのもコマンドラインだけだ、という書き方だ。GUIはその上に載る表示層だと捉えると、あとの選び分けが楽になる。

git-guiの画面は4つの領域に分かれている

git gui はコミットを作るための道具で、リポジトリのフォルダに移ってからコマンドラインで起動するのが一番簡単だと案内されている。開いた画面は4つの領域に分かれており、その対応が分かれば操作は迷わない。

左側はインデックスにあたる領域だ。上段にステージされていない変更、下段にステージされた変更が並ぶ。ファイル名の横のアイコンをクリックすると、そのファイルが上段と下段のあいだを行き来する。これが git add と git restore --staged に相当する操作で、コマンドを打たずに状態を動かせる部分だ。ファイル名そのものをクリックすると、表示するファイルが切り替わる。

右上は差分の表示領域で、いま選んでいるファイルの変化が出る。ここで効くのが右クリックだ。公式の解説書は、この領域を右クリックすることで個々のhunk、あるいは個々の行をステージングできると書いている。コマンドラインの git add --patch に当たる操作で、GUIのほうが対象を目で選べるため、1つのファイルに2つの目的の変更が混ざったときの切り分けが速い。

右下はメッセージとアクションの領域だ。テキストボックスにメッセージを入れて Commit を押すと git commit と同じことが起きる。Amend のラジオボタンを選ぶと、Staged Changes の領域に直前のコミットの内容が表示され、そのコミットを直せる。内容やメッセージを変えてから Commit をもう一度押すと、古いコミットが新しい内容で置き換わる。直前の1つを修正するだけならコマンドを覚える必要がないのは、この画面の利点だ。

gitkは履歴を追うための画面

gitk のほうは履歴を見る道具で、git log と git grep を強力なGUIの殻から使えるようにしたようなものだと説明されている。過去に何が起きたかを探すとき、あるいは履歴の形を目で見たいときに使う。起動はリポジトリのフォルダで gitk と打つだけで、コマンドラインのオプションを後ろに付けられる。

そのオプションの多くは背後の git log にそのまま渡される。最も便利なものの1つとして挙げられているのが --all で、HEADからたどれるコミットだけでなく、任意の参照からたどれるコミットを表示させる。他の人のブランチや、切り替えを忘れていた作業の位置を探すときに効く。オプションが git log に渡るという性質は、そのまま応用に使える。特定のフォルダの履歴だけを見たいならパスを後ろに付ければよく、期間を絞りたいなら日付の指定がそのまま通る。コマンドラインで覚えた絞り込みを、そのまま図の側に持ち込める形になっている。

画面は上下と中央に分かれている。上部には git log --graph の出力に似た図が出て、各ドットがコミット、線が親子関係、参照が色付きの箱として表示される。ここで色の意味を1つ覚えておくと読みが速い。黄色の点がHEAD、赤い点がまだコミットになっていない変更だ。自分がいまどこに立っていて、手元に何が残っているかが、この2色で分かる。

下部には選んだコミットの内容が出る。コメントとパッチが左、概要が右という配置だ。中央にあるのは履歴の検索に使うコントロール類で、文字列からコミットを探す作業はここで行う。コマンドラインで git log -S の書き方を思い出すより、この欄に打ち込むほうが早い場面は多い。

第三者製のクライアントは55件、Mac対応は41件

同梱の2つで足りないと感じたときの選択肢は、想像よりずっと多い。

Git公式サイトで紹介しているGUIは全部で50種類以上 https://git-scm.com/downloads/guis 今回はその中から一部抜粋して紹介します。 出典: qiita.com

Git公式の一覧を現時点で数えると掲載は55件で、そのうちMacに対応しているものは41件ある。同じページには、Gitにはコミット用の git-gui と閲覧用の gitk が同梱されているが、そのプラットフォームらしい操作感を求める人には第三者製の道具がいくつもある、と説明が添えられている。価格と提供形態は公式の一覧に載っているので、そこから抜き出すと次のようになる。

名前 対応 価格 ライセンス
GitHub Desktop Mac, Windows 無料 MIT
SourceTree Mac, Windows 無料 商用
GitUp Mac 無料 GNU GPL
GitKraken Desktop Linux, Mac, Windows 無料 / 年額48ドルから 商用
SmartGit Linux, Mac, Windows 非商用は無料 / 年額59ドル 商用
Fork Mac, Windows 59.99ドル(試用あり) 商用
Tower Mac, Windows 年額69ドルから(30日試用) 商用
Sublime Merge Linux, Mac, Windows 99ドル / 年額75ドル 商用

無料のものと有料のものの差は、機能の数よりも想定している作業の流れに出る。公式の解説書も、それぞれのインタフェースは別々のワークフローに合わせて調整されており、作者が効率的だと考えた手順を支えるためにGitの機能から一部だけを選んで見せている場合がある、と書いている。同じ資料は、あるツールが他より良いということはなく、自身が想定している目的により適合しているだけだとも述べている。選ぶ基準は優劣ではなく、自分の手順に合うかどうかだ。

GUIの利点は3つ、詰まる場所は1つ

GUIを使う利点は3つに整理できる。1つ目は、状態が一望できることだ。どのファイルが変わり、何がステージされ、履歴がどう分かれているかを、コマンドを打たずに見られる。2つ目は、対象を目で選べることだ。差分の一部だけをステージする操作は、行を見ながら選べる画面のほうが速い。3つ目は、初心者が最初の1歩を踏み出しやすいことだ。コミットとプッシュがボタンになっていると、順番を覚える前に手が動く。

詰まる場所は1つで、そこは公式の解説書がはっきり書いている。グラフィカルなクライアントで可能でコマンドラインでは不可能な処理というものはなく、リポジトリに対する作業ではコマンドラインが最も強力であることに変わりはない、という記述だ。言い換えると、GUIで解けない問題は、最後はコマンドラインに戻って片付けることになる。

その戻りが発生する場面は決まっている。マージの衝突が入れ子になったとき、直近ではないコミットを直したいとき、履歴を書き換えたいとき、そして操作を取り消したいときだ。ワークフロー指向のクライアントは、内部でプッシュとフェッチとマージとリベースを1つのボタンにまとめていることがある。便利な反面、失敗したときに何が起きたのかを画面から読み取れない。公式の解説書も、そうしたまとめ方の例として、同期のボタンが内部で git pull --rebase を試し、衝突で失敗したら git pull --no-rebase に切り替えてから git push を実行する、という順番を挙げている。動いているうちは手間が減るが、途中で止まったときはこの順番を知らないと切り分けができない。

だから現実的な組み合わせは、画面で見てコマンドで直す形になる。状態の確認と、差分を目で選ぶ作業はGUIに任せる。取り消しと書き換えはコマンドラインで打つ。この分担にすると、GUIに依存しすぎて詰まる事故も、コマンドを覚えきれずに手が止まる事故も起きにくい。同梱の2つがタスク指向に作られているのは、まさにこの分担を前提にしているからだ。

画面とターミナルを、同じ窓に並べる

上の分担を実際にやると、窓が増える。フォルダを開いて対象を確かめ、GUIのクライアントに切り替えて差分を見て、ターミナルに移って取り消しのコマンドを打ち、またフォルダに戻る。1回あたりは数秒でも、1日に何十回も起きるので、積み上がる量は無視できない。

ここに効くのは操作の練習ではなく、置き方のほうだ。フォルダとターミナルとAIが同じ窓にある形にすると、対象を選んだ状態でそのパスに対して打ち、結果をその場で読むところまでが1画面で終わる。どの操作がそれに当たるかはできることに一覧がある。差分を見る画面と、打ち消すコマンドを打つ場所が離れているほど、この差は大きくなる。

同じ用途を他の道具がどう解いているかを横に並べたい場合は他のファイル管理との比較が近い。ターミナルを内蔵したもの、プレビューに強いもの、リモート接続に強いもので設計が違うので、往復の多い人はどこを内蔵しているかで基準が変わる。費用の考え方は料金にまとまっている。英語以外の環境で使う場面があるなら対応言語も見ておくと選び直しが減る。

作業が外に出る場面もある。手元のMacに残した状態を、移動中にiPhoneやiPadから見て続きを返す方法はiPhone・iPadから続きをにある。残った細かい疑問はよくある質問に揃っている。

進める順番を1つに決めるなら、こうなる。まず gitk --all で履歴の形を見る癖を付ける。次に、差分の一部だけをステージする作業を git gui の右クリックに寄せる。最後に、取り消しと書き換えはコマンドラインに残す。この3つを分けておくと、第三者製のクライアントを試すときも、どこまで任せるかを自分で決められる。

よくある質問

Macで `git gui` と打っても反応がないのはなぜですか?

AppleがXcode Command Line Toolsで配っているGitには、git-gui と gitk が同梱されていないためです。Git公式のmacOS向けの案内では、この2つを使いたい場合はHomebrewで brew install git-gui を実行する手順が別に示されています。本体をHomebrewで入れている場合も、この追加は別に必要です。

git-gui と gitk は、どう使い分けるのですか?

役割が分かれています。git-gui はコミットを作るための画面で、ステージの操作と差分の選択、コミットメッセージの入力を担います。gitk は履歴を見るための画面で、コミットの親子関係や参照の位置を図で追います。公式の解説書は、この2つを目的別に絞り込んだタスク指向のツールの例として挙げています。

GUIのクライアントだけで作業を完結できますか?

多くの作業は完結しますが、そうならない場面が残ります。公式の解説書は、グラフィカルなクライアントで可能でコマンドラインでは不可能な処理はなく、リポジトリへの作業ではコマンドラインが最も強力だと明記しています。履歴の書き換えや複雑な衝突の解消では、コマンドラインに戻る前提で選ぶほうが安全です。

無料のGUIクライアントでも実務に使えますか?

使えます。Git公式の一覧には無料のものが多数掲載されており、GitHub DesktopはMITライセンスで無料、SourceTreeも無料で提供されています。有料との差は機能の数より想定している作業の流れに出るため、自分の手順に合うかどうかで選ぶほうが外れにくいです。

記事一覧へ戻る