Lazygit使いこなし術 - Gitを視覚的に操作する最強ツール
Lazygitは、Gitをターミナル上で視覚的に操作できるツールです。
Gitのコマンドを覚えなくても、キーボード操作だけで複雑なGit操作ができるようになります。
この記事では、Lazygitの基本から応用まで、初心者にもわかりやすく解説します。
Lazygitとは?
Gitの課題
Gitは非常に強力なバージョン管理ツールですが、コマンドが複雑です。
# 変更をステージング
git add .
# コミット
git commit -m "メッセージ"
# インタラクティブリベース
git rebase -i HEAD~3
# コンフリクト解決
git add 解決したファイル
git rebase --continue
これらのコマンドを覚えて、正確に入力する必要があります。
Lazygitが解決すること
Lazygitは、これらの操作を視覚的なインターフェースで行えるようにします。
【Lazygitの画面】
┌────────┬───────────────────────────────────────┐
│Status │ │
├────────┤ ファイルの差分がここに表示される │
│Files │ │
│ M app │ - old line │
│ M test│ + new line │
├────────┤ │
│Branches│ │
├────────┤ │
│Commits │ │
└────────┴───────────────────────────────────────┘
キーを押すだけで操作できる
インストール方法
Omarchyの場合
Omarchyにはプリインストールされています。追加のインストールは不要です。
その他の環境
# macOS
brew install lazygit
# Arch Linux
sudo pacman -S lazygit
# Ubuntu/Debian
sudo add-apt-repository ppa:lazygit-team/release
sudo apt update
sudo apt install lazygit
# Windows (Scoop)
scoop install lazygit
起動方法
# ターミナルから
lazygit
# または短縮形
lg
Neovim(LazyVim)からは:
Space + g + g
画面構成
Lazygitの画面は複数のパネルで構成されています。
┌──────────┬─────────────────────────────────────────────┐
│ 1.Status │ │
├──────────┤ │
│ 2.Files │ 5.メインパネル │
├──────────┤ (差分、ログ、詳細情報) │
│3.Branches│ │
├──────────┤ │
│ 4.Commits│ │
├──────────┤ │
│ 5.Stash │ │
└──────────┴─────────────────────────────────────────────┘
| パネル | 内容 |
|---|---|
| Status | リポジトリの状態 |
| Files | 変更されたファイル |
| Branches | ブランチ一覧 |
| Commits | コミット履歴 |
| Stash | スタッシュ一覧 |
| メイン | 選択した項目の詳細 |
パネル間の移動
| キー | 動作 |
|---|---|
1〜5 |
各パネルに直接移動 |
h / l
|
左右のパネルに移動 |
j / k
|
項目を上下に移動 |
Tab |
次のパネルへ |
基本操作
ファイルのステージング
変更したファイルをコミットするには、まず「ステージング」します。
【Filesパネル】
M main.py ← 変更あり(Modified)
M utils.py ← 変更あり
? new_file.py ← 新規ファイル(Untracked)
| キー | 動作 |
|---|---|
Space |
選択したファイルをステージング/アンステージング |
a |
すべてのファイルをステージング/アンステージング |
ステージングされると左側にA(Added)と表示されます:
A main.py ← ステージング済み
M utils.py ← まだステージングしていない
部分的なステージング(行単位)
ファイル全体ではなく、一部の変更だけをステージングすることもできます。
- ファイルを選択して
Enterを押す - メインパネルで差分が表示される
- ステージングしたい行で
Spaceを押す
【差分表示】
1: def hello():
- 2: print("old") ← この行は削除された
+ 3: print("new") ← この行は追加された
4: return True
Spaceで行単位、vで範囲選択してステージング
| キー | 動作 |
|---|---|
Space |
現在の行をステージング |
v |
ビジュアルモード(範囲選択) |
a |
ハンク(変更のかたまり)全体をステージング |
コミット
ステージングしたファイルをコミットします。
| キー | 動作 |
|---|---|
c |
コミット(メッセージ入力画面が開く) |
C |
コミット(エディタでメッセージ入力) |
A |
直前のコミットを修正(amend) |
【コミットメッセージ入力】
┌─────────────────────────────────────┐
│ Commit message: │
│ ユーザー認証機能を追加 │
│ │
│ Enter to confirm, Esc to cancel │
└─────────────────────────────────────┘
変更の確認
| キー | 動作 |
|---|---|
Enter |
選択項目の詳細を表示 |
d |
ファイルの変更を破棄(危険!) |
D |
破棄オプションを表示 |
ブランチ操作
ブランチ一覧
3キーまたはh/lでBranchesパネルに移動します。
【Branchesパネル】
✓ main ← 現在のブランチ
feature/login
feature/signup
develop
基本操作
| キー | 動作 |
|---|---|
Space |
ブランチをチェックアウト |
n |
新規ブランチを作成 |
d |
ブランチを削除 |
r |
ブランチ名を変更 |
M |
現在のブランチにマージ |
R |
現在のブランチにリベース |
新規ブランチの作成
-
nを押す - ブランチ名を入力
- Enterで確定
【新規ブランチ】
┌─────────────────────────────────────┐
│ New branch name: │
│ feature/new-feature │
└─────────────────────────────────────┘
マージ
- マージ先のブランチをチェックアウト(
Space) - マージ元のブランチを選択
-
Mを押してマージ
【例:developをmainにマージ】
1. mainをチェックアウト
2. developを選択
3. Mを押す
リベース
リベースは、コミット履歴を整理するための強力な機能です。
インタラクティブリベース
【Commitsパネル】
abc1234 最新のコミット
def5678 2番目のコミット
ghi9012 3番目のコミット ← このコミットで `e` を押す
| キー | 動作 |
|---|---|
e |
リベースを開始(ここから上のコミットを編集) |
s |
スカッシュ(1つ前のコミットと統合) |
f |
fixup(統合してメッセージは捨てる) |
r |
reword(コミットメッセージを変更) |
d |
drop(コミットを削除) |
スカッシュ(コミットの統合)
複数のコミットを1つにまとめます。
【Before】
abc1234 機能完成
def5678 typo修正
ghi9012 さらに修正
【After(スカッシュ後)】
xyz9999 機能完成
手順:
- 統合したいコミットを選択
-
sを押す - 新しいコミットメッセージを入力
コミットの順序変更
コミットの順序を変更できます。
| キー | 動作 |
|---|---|
Ctrl + k |
コミットを上に移動 |
Ctrl + j |
コミットを下に移動 |
チェリーピック
特定のコミットだけを別のブランチに適用します。
手順
- コピーしたいコミットを選択
-
Shift + Cでコピー - 適用先のブランチに移動
-
Shift + Vで貼り付け
【例】
developブランチのコミット「abc1234」をmainに適用
1. developブランチのabc1234を選択
2. Shift + C
3. mainブランチに移動
4. Shift + V
コンフリクトの解決
マージやリベースでコンフリクト(衝突)が発生した場合の対処法です。
コンフリクトの確認
コンフリクトがあるファイルにはUUと表示されます:
【Filesパネル】
UU main.py ← コンフリクトあり
解決手順
- コンフリクトのあるファイルを選択
-
Enterで詳細を表示 -
eでエディタを開いて編集
または、Lazygit内で解決:
| キー | 動作 |
|---|---|
← |
自分の変更を採用 |
→ |
相手の変更を採用 |
b |
両方の変更を採用 |
解決後
- 解決したファイルを
Spaceでステージング -
mを押して続行
Filesパネルで `m` → "continue" を選択
スタッシュ
作業中の変更を一時的に退避する機能です。
スタッシュの作成
| キー | 動作 |
|---|---|
s |
変更をスタッシュに保存 |
S |
ステージング済みの変更のみスタッシュ |
スタッシュの適用
Stashパネル(5キー)で:
| キー | 動作 |
|---|---|
Space |
スタッシュを適用 |
g |
スタッシュを適用して削除(pop) |
d |
スタッシュを削除 |
元に戻す(Undo/Redo)
Lazygitにはアンドゥ/リドゥ機能があります。
| キー | 動作 |
|---|---|
z |
元に戻す(Undo) |
Ctrl + z |
やり直し(Redo) |
この機能はreflogをベースにしているため、コミット操作も取り消せます。
便利なショートカット
全般
| キー | 動作 |
|---|---|
? |
ヘルプを表示 |
q |
Lazygitを終了 |
@ |
コマンドログを表示 |
+ |
次のスクリーンモード |
_ |
前のスクリーンモード |
検索
| キー | 動作 |
|---|---|
/ |
現在のパネルで検索 |
n |
次の検索結果 |
N |
前の検索結果 |
オプションメニュー
| キー | 動作 |
|---|---|
m |
現在の項目のオプションメニュー |
x |
メインメニュー |
実践的なワークフロー
日常的なコミット
1. lazygit を起動
2. Filesパネルで変更を確認
3. Space でファイルをステージング
4. c でコミットメッセージ入力
5. Enter で確定
機能ブランチの作成と作業
1. Branchesパネルで n を押す
2. ブランチ名を入力(例: feature/login)
3. 作業してコミット
4. 完了したら main に移動
5. feature/login を選択して M でマージ
コミットの整理(リベース)
1. Commitsパネルで整理したい最初のコミットで e
2. s でスカッシュ、r でメッセージ変更など
3. リベースが完了するまで操作
コンフリクト解決
1. コンフリクトが発生
2. UU のファイルを選択
3. Enter で差分を確認
4. ← → b でどちらを採用するか選択
5. 全て解決したら Space でステージング
6. m → continue で続行
カスタマイズ
設定ファイルは~/.config/lazygit/config.ymlにあります。
設定例
# ~/.config/lazygit/config.yml
gui:
# テーマ
theme:
selectedLineBgColor:
- default
selectedRangeBgColor:
- default
# 言語
language: "ja"
git:
# 自動フェッチの間隔(秒)
autoFetch: true
autoFetchInterval: 120
# プルの設定
pull:
mode: "rebase"
keybinding:
# カスタムキーバインド
commits:
moveDownCommit: "<c-j>"
moveUpCommit: "<c-k>"
トラブルシューティング
「detached HEAD」状態になった
1. Branchesパネルで戻りたいブランチを選択
2. Space でチェックアウト
リベースを中止したい
m → "abort rebase" を選択
マージを中止したい
m → "abort merge" を選択
間違えてコミットを消してしまった
z で Undo(reflogから復元)
まとめ
Lazygitの主要な操作をまとめます:
| 操作 | キー |
|---|---|
| ステージング | Space |
| コミット | c |
| ブランチ作成 | n |
| チェックアウト | Space |
| マージ | M |
| リベース | R |
| スカッシュ | s |
| チェリーピック |
Shift+C, Shift+V
|
| スタッシュ | s |
| 元に戻す | z |
| ヘルプ | ? |
Lazygitを使えば、複雑なGit操作も視覚的に行えます。最初は基本的なステージング・コミットから始めて、徐々にリベースやチェリーピックなどの高度な操作を覚えていきましょう。