経緯
Git の Windows クライアントとしてしばらく SourceTree を使っていましたが
ブランチが増えてくるごとに遅くなってきたので、別のクライアントを探していました。
そんな中で見つけた SmartGit が割と使いやすかったので、機能をざっと調べてみました。
- 対象バージョン
- SmartGit 6.5.8 (Windows)
ちなみに SmartGit は最初の30日間は無料で使えますが
その後はライセンス購入が必要です。
Menu
SmartGit の全メニューを記載します。
Menu - Repository
Add or Create
Ctrl + O
新規または既存gitリポジトリを追加。
Clone
Ctrl + Shift + O
リモート(ssh://)またはローカルのgitリポジトリの複製を作成。
Close
Ctrl + F4
開いているリポジトリを閉じる。
Add Group
リポジトリグループを作成。
Eclipse のワークスペース的な感じ?
Settings
Alt + Return
リポジトリの設定。
Exit
Alt + X
終了
Menu - Edit
Filter Files
Ctrl + F
Files に表示するファイルのフィルタリングができます。
- によるワイルドカード指定が可能。便利。
Select Commitable Files
Ctrl + Shift + A
選択中フォルダ内で、コミット可能なファイルをすべて選択します。
編集中のファイルが何も無ければ、何もしません。
Select Directory
ファイルを選択しているとき、その親ディレクトリを選択します。
Copy Name
Copy Path
Copy Relative Path
Copy Message
Copy ID
Clear Output
Ctrl + Backspace
Outputビューの内容をクリアします。
Customize
ショートカットキー、およびツールバーのアイコンをカスタマイズできます。
Preferences
Ctrl + ,
アプリの設定を行います。
Menu - View
Files ビューの設定を行います。
Menu - Remote
Pull
Ctrl + P
リポジトリから Pull または Fetch します。
Pull は fetch + merge ですが、普通にマージするか rebase するかを選べます。
Synchronize
Ctrl + Y
ローカルファイルの Push および、リモートからの Pull を一連して行います。
Push
Ctrl + U
現在のブランチをリモートに Push します。
Push To
Ctrl + Shift + U
特定のブランチ/ポイントの Push や、Force Push はこちらで行います。
Add
リモートリポジトリを追加します。
Fetch More
リモートから Fetch を行います。
Rename
Delete
Submodule
Properties
リモートのURLを変えるときはここで行います。
Menu - Local
Stage
Ctrl + T
選択したフォルダ内で、未ステージ状態のファイルをステージに上げます。
Unstage
Ctrl + Shift + T
Stage の逆。
Index Editor
ファイル選択時、Index Editor なるものを表示します。
使い道はよくわかりません…
Ignore
Rename
Toggle 'Assume Changed'
ファイルの 'assume-unchaned' フラグをトグルします。
このフラグは、そのファイルを無視したいときに使います。
もしローカルでファイルが変更されていたとしても、それは無視されます。
これは例えばリモートからPullしたときに、ローカルファイルの変更内容が上書きされることを意味します。
Toggle 'Skip Worktree'
ファイルの 'skip-worktree' フラグをトグルします。
このフラグは、そのファイルを無視したいときに使います。
もしローカルでファイルが変更されていれば、それは無視されません。
Resolve
Ctrl + Shift + V
Conflict が発生したとき、それを解消します。
Commit
Ctrl + K
リポジトリに Commit を行います。
直前のコミットを取り消して、今回のコミットで上書きすることもできます。
Undo Last Commit
Ctrl + Shift + K
Edit Last Commit Message
Shift + F2
Discard
Ctrl + Z
ローカルで変更した内容を破棄して、HEAD または Index の状態まで戻します。
- HEAD
- リポジトリの内容まで全て戻す
- Index
- ローカルでaddしたファイルはそのままで、リポジトリにあるファイルの変更分のみ戻す
Remove
Ctrl + -
対象のファイルをトラック対象から外します。
Delete
Delete
対象のファイルをローカルシステムから削除します。
Reset
Ctrl + R
git reset を行います。
通常ローカルで変更した内容を戻すときには reset を使うのですが
Smartgit では前述したように Discard コマンドがあるので、
こちらの Reset はもっと特殊な用途で使うことになるはずです。
Squash Commits
Ctrl + J
ローカルリポジトリ上での複数のコミットを、一つにまとめます。
使い方を説明します。
まず、Outgoing ビュー上で複数のコミットを選択します。
Outgoing ビューは、まだリモートに Push していないコミットの一覧を表示します
ここで、メニューから Squash Commits を選択、もしくは Ctrl + J します。
すると、コミットメッセージを入力するダイアログが現れるので、メッセージを入力して
「Squash Commits」します。
すると、その複数のコミットが一つにまとめられます。
条件として、選択する複数のコミットは連続したコミットである必要があります。
つまり、A -> B -> C とあった場合、AとCを選択して Squash することはできません。
Squash Commits を使えば、ローカルでこまめにコミットしていても
リモートに Push する前にそのコミットを一つにまとめてしまえば
最終的に残るコミットが一つになるので、非常にすっきりしたコミット履歴を保つことができます。
Squash Commits は是非使いましょう。
Save Stash
Ctrl + S
現在の状態を Stash として保存した後、HEADの状態まで revert します。
- Stash メッセージ
- untracked file を含めるか
- Stash 後、revert をしないでそのままにするか
Stash した内容は、Branches ビューの Stashes から確認できます。
Apply Stash
Ctrl + Shift + S
保存された Stash の状態まで戻します。
その後、Stash を破棄するかそのまま残すかを選べます。
Drop Stash
Stash を破棄します。
Clean Up
Menu - Branch
Git-Flow
Check Out
Merge
Cherry-Pick
Revert
Ctrl + Alt + M
revert処理を行います。
revert とは「特定のコミットで行われた全ての変更を元に戻す新しいコミットを生成し、それを現在のブランチに適用する」コマンドです。
- A -> B -> C -> D
上記のようなコミットの履歴があった場合、Dで行った変更を取り消したい場合があります。
普通に考えれば、Dのコミットを取り消せばCの状態に戻るのですが
git ではこれには reset コマンドを使います。
revert はそうではなく、あくまで新しいコミットを作成します。
D の段階で revert コマンドを実行すると、対象となるコミットを選択するダイアログが開きます。
ここで間違えやすいのが、Cのコミットを選択してしまうことです。
ここで選択すべきなのは、「取り消したいコミット」です。
つまり、Dを選択します。
すると、以下のようになります。
- A -> B -> C -> D -> D'
D' の内容はDの内容を完全に打ち消すものなので、結果的にこのブランチの内容はCのときと同じになります。
Rebase
各種 rebase 処理を行います。
この処理は便利ですが、rebase の動作をよく把握したうえで使うようにしましょう。
Rebase HEAD to
Ctrl + D
現在のブランチの最新コミット(とその関連コミット全て)を、選択したコミットに適用します。
Rebase to HEAD
Ctrl + Shift + D
選択したコミット(とその関連コミット全て)の内容を、現在のブランチの先端に適用します。
Add Branch
F7
ブランチを作成します。
Add Tag
Shift + F7
現在のブランチにタグを作成します。
Rename
Delete
Set Tracked Branch
現在のブランチに、追跡ブランチを設定します。
通常はリモートブランチをローカルに checkout するときに自動的に追跡ブランチが作成されますが
ここでは手動で追跡ブランチを設定できます。
Stop Tracking
追跡ブランチを解除します。
Menu - Query
Open
選択しているフォルダやファイルを開きます。
Show Changes
F4
選択したファイルの、HEADからの変更内容を表示します。
Conflict Solver
ファイルの衝突を解消するウィンドウを開きます。
Log
Ctrl + L
選択したファイルのgitログを表示します。
ブランチを選択していた場合、ルートディレクトリのgitログを表示します。
Blame
Ctrl + Shift + L
選択したファイルの blame を表示します。
これは、ファイルの各行がどのコミットで変更されたかを一覧で見るものです。
これによって、バグ混入の時期や犯人を探すのが主な目的です。
Menu - Changes
Reload
Shift + F5
Undo
HEAD vs. Index
HEAD と Index の内容を比較します。
Index vs. Working Tree
Index と作業ツリーの内容を比較します。
Previous Change
Shift + F6
前の変更を表示します。
Next Change
F6
次の変更を表示します。
Ignore Whitespace for Line Comparison
空白を無視して比較します。
Ignore Case Change for Line Comparison
大小文字の違いを無視して比較します。
Settings
比較モードの詳細を設定します。
Menu - Tools
Open File
Open in Explorer
Open in Terminal
Reveal in Explorer
Open Git-Shell
Set Excutable Tag
Unset Excutable Tag
Apply Patch
Menu - Review
Create Pull Request
Sync
Configure
Menu - Window
Menu - Help
Window - Repositories
gitリポジトリを管理するウィンドウ(ビュー)です。
複数のリポジトリを管理できますが、カレントリポジトリは常に一つだけ選択されます。
また、Eclipse の Working Sets のように、複数のリポジトリをグルーピングして管理できます。
Window - Files
Repositories で選択したフォルダ内にあるファイルから
フィルタリングした結果をリストアップするビューです。
nnn files hidden
フィルタリングされて非表示になっているファイル数
File Filter
Ctrl + F でアクティブになります。
フィルタリングする文字列を指定します。
通常は * などでワイルドカードが指定可能ですが、正規表現での指定も可能です。
また、指定した文字列はパターンとして保存することができます。
Files from Subdirectories(アイコン1)
Ctrl-0
Repositories で選択したフォルダのサブフォルダまで全て表示対象とします。
デフォルトON
Show Unchanged Files(アイコン2)
Ctrl-1
変更が無いファイルも表示対象とします。
デフォルトOFF
Show Unversioned Files(アイコン3)
Ctrl-2
まだバージョン管理されていないファイル(ex. 新規作成ファイル)も表示対象とします。
デフォルトON
Show Staged Files(アイコン4)
Ctrl-4
ステージに上がっているファイルを表示対象とします。
デフォルトON
Show Ignored/Skipped Files(アイコン5)
Ctrl-3
.gitignore によって無視されたファイルも表示対象とします。
デフォルトOFF
Show Assume Unchanged Files(アイコン6)
Ctrl-5
'assume-unchaned' フラグが付いたファイルも表示対象とします。
このフラグは、git管理されているが一時的にそのファイルを無視したいときに使います。
デフォルトOFF
Window - Outgoing
まだプッシュされていないコミットを一覧を表示します。
Window - Branches
カレントリポジトリの全ブランチを表示します。
それを含め、以下のものが表示されます。
- ローカルブランチ一覧
- リモートブランチ一覧
- タグ一覧
- Stash一覧
ウィンドウ内では、ブランチ名のインクリメンタルサーチが可能です。
大量のブランチを扱うとき、この機能がとても重宝します。
Window - Blame
ファイルの blame コマンド実行時に表示されるウィンドウです。
なかなか高機能です。
ツールバー
View Commit
blame対象とするコミットを指定します。
Highlight
どの行をハイライト表示するかを選択します。
- Changes Since
- 特定のコミットを指定し、そのコミットとの差分をハイライト表示
- Age
- 行が変更された時期によって、色分け表示
- Auther
- 行を変更した Author によって、色分け表示
Commit
Highlight = Changes Since にしたときのみ有効
差分表示対象とするコミットを指定します。
Windows - Blame - ショートカット
Find
Ctrl + F
ファイルから文字列を検索します。
インクリメンタル検索できないのがイタい。
Go To First Commit
Alt + Home
このファイルの初回コミットに移動します。
Go To Previous Commit
Alt + Up
一つ前(過去)のコミットに移動します。
Go To Next Commit
Alt + Down
一つ先(未来)のコミットに移動します。
Go To Last Commit
Alt + End
このファイルの直近のコミットに移動します。
Go To Line
Ctrl + G
指定行に移動します。
Line History
Ctrl + Shift + 1
選択した単行の全変更履歴を見るウィンドウを下部に開きます。
Close
Ctrl + F4
ウィンドウを閉じます。
Repository Settings
リポジトリの設定ウィンドウで設定できる内容について記載します。
Remember as default
ここで設定した内容をデフォルトとして設定し
他のプロジェクトでも適用します。
Pull
For new branches configure to
新しくブランチを作るときの設定をします。
- Merge fetched remote changes
- リモートで変更された内容を、merge して取り込む
- Rebase local branch onto fetched changes
- リモートで変更された内容を、rebase して取り込む
Prune obsolute remote tracked branches
リモートから削除されたブランチをローカルで削除するかどうか。
デフォルトON
Always fetch new commits, tags and branches from submodule
サブモジュールからのコミットなどもフェッチする。
デフォルトOFF
Update registered submodules
登録されたサブモジュールを更新する。
Commit
コミットするときの名前とemailの設定。
Text encoding
このリポジトリの文字エンコーディングを指定。
Windows で作業する場合、UTF-8 に変えておくこと。
Preferences
ここについては後ほど…