【Eclipse EGit】Git Staging viewの使い方

EclipseのEGitの機能の一部であるGit Stagingは便利ですが,使い方が曖昧であったためここにまとめておこうと思います.

EGitとは

EGitはEclipseにおけるGit操作を簡便にするツールです.基本的な操作であれば,コンソールからgitコマンドを叩く必要がなくなります.特にGit Staging Viewはcommit関連の機能を集約しており,使用頻度が高いです.Eclipseに標準搭載されているので使用している人も多いはずです.

以下で使用方法をまとめますが,より詳細に知りたい方は下記URLを参照するとよいでしょう.
EGit/User Guide - Eclipsepedia

Git Staging

Git Staging Viewは以下のようなviewになります.
f:id:k-true:20200430163905p:plain

以下の3つの枠で構成されています.
・Unstaged Changes:変更が加えられたファイルが表示される場所
・Staged Changes:Stage(Index)されたファイル(commitされる予定のファイル)が表示される場所
・Commit Message : commitする際のメッセージを入力する場所.

以下,項目別に書いていきます.

Unstage ⇔ Staged Changes の移動

f:id:k-true:20200430164549p:plain

+ボタン:選択したファイルのみStaged Changesへ
++ボタン:すべてのファイルをStaged Changesへ
Add to Index : 選択したファイルのみStaged Changesへ

逆に,Staged Changesにファイルがある状態では逆の操作が可能です.
ーボタン:選択したファイルのみUnstaged Changesへ.
ーーボタン:全てのファイルをUnstaged Changesへ.
remove from Index:選択したファイルのみUnstaged Changesへ.

Commit, Commit and Push

明らかですが,右下のいずれかのボタンを押すことによりコミット関連の処理を行えます.
Commit :Commitのみ
Commit and Push:Commitした後に問題が発生しなければPushします.

Open Working Tree Version

GitにおいてWorking Treeとは現在の作業ディレクトリのことを指すので,現在選択している(変更済みの)ファイルが表示されます.
これはファイルをダブルクリックしても実現されます.

Compare with Index

実行すると下図のCompare viewが開き,選択されたファイルのHEADとの差分を確認できます.すなわち,元の状態と加えた変更の差分を確認できます.
f:id:k-true:20200430165515p:plain
LocalがWorking Tree内の変更済みファイルのこと.
IndexがHEAD状態(すなわち元の状態)のファイルのこと.

Replace with HEAD Revision

加えた変更を棄却できます.すなわち,選択したファイルをHEADの状態に戻してくれます.ただし,戻した変更は再度戻すことができないので注意してください.いずれ再度戻すことを想定しているのであれば,一度コミットしてからrevertを行いましょう.

Assume Unchanged

変更が加えられたファイルを,変更がないファイルとみなし,コミット対象に含めません.例えば自分でテストするために適当に書き換えたが,この変更は加えたくないので一時的に無視してほしい場合に用います.より厳密にはGitの管理対象から外すことが可能であるので,Gitコマンドの応答性を向上させることができるようです.

なお,Assume Unchangedにした場合はPackage Explorerにおいて,ファイルが✔に変わっていることから判断できます.元に戻したい場合は図のようにTeam > Advanced > No Assume Unchangedとします.
f:id:k-true:20200430171639p:plain

しかし,Package Explorerの膨大なファイルの中から✔を探すのは現実的ではありませんので,git管理プロジェクト直下で以下のgitコマンドを叩きます.

git ls-files -v | grep ^h

これで表示されたのがAssume Unchangedフラグとなっているファイルになります.

ただ,Assume Unchangedを明示的に戻す機会はあまり多くないと思います.Assume Unchangedは,コミット差分がある場合には,チェックアウトを切り替えた場合やMergeする場合には自動的にフラグが外れ,加えた変更が棄却されます.注意点としては,Mergeの際にファイルのコミット差分がない場合,加えた変更は棄却されず,そのままの状態で残りますので,不要な場合には正しく元に戻す必要があります.

慣れないうちは多用しないほうが良いかもしれませんね.

Untrack

Gitの管理から外れます.明示的に戻すまでGitは該当ファイルのバージョンコントロールを行いません.テストの際に生じるゴミファイルなどを設定しておく感じでしょうかね.

show in

まぁ色々見れます.

delete

新しく作成したファイルにはdeleteを行うことが可能です.不要なファイルならここでも削除することができます.