皆さんはgit操作どのように行っていますか?
- GUIアプリ
- githubdesktop
- SourceTree
- VSCode/JetbrainsIDEの内蔵機能
- CLI(ターミナル等でコマンド直打ち)
- git add
- git commit
- git push
- git reflog などなど
本記事はgitをCUI環境でGUIっぽく操作するというTUIアプリケーションに属するlazygitの使い方をまとめて説明する.
SourceTree(GUIソフト)を使ってgit操作したい方はこちらから
他のチートシート
git/gh コマンド(gitコマンド以外にもgitの概念も書いてあります)
今回は特にgitのことを扱うのでこの記事の内容がわかること前提で話します.add commit pushなど基本的なコマンド以外にもlazygitはreflogなど普段あまり使わないコマンドも出てくるので,一読しておくことをお勧めします.
Docker コマンド
ステータスコード
TypeScript
SQL
Go
Vim
プルリクエスト・マークダウン記法チートシート
ファイル操作コマンドチートシート
VSCode Github Copilot拡張機能
OpenAI Assistants API
他のシリーズ記事
TypeScriptで学ぶプログラミングの世界
プログラミング言語を根本的に理解するシリーズです.
情報処理技術者試験合格への道[IP・SG・FE・AP]
情報処理技術者試験の単語集です.
IAM AWS User クラウドサービスをフル活用しよう!
AWSのサービスを例にしてバックエンドとインフラ開発の手法を説明するシリーズです.
TUIとは?CUI/GUIとはどう違うの?
TUI(Text-based User Interface)とは
テキストベースのユーザーインターフェースの一種である.CUI(Character User Interface)やCLI(Command Line Interface)の発展形として位置づけられ,テキストモードでありながら,GUI(Graphical User Interface)な要素を取り入れたインターフェースを提供する.
TUIの主な特徴は,テキスト文字を使用して画面上に疑似的なグラフィカル要素を表現することにある.例えば,ボックス,枠線,メニュー,ボタンなどをASCII文字や拡張文字セットを用いて描画する.これにより,純粋なテキストベースのインターフェースよりも視覚的に構造化された情報表示が可能となる.また,キーボード操作を主体としつつ、カーソルやハイライトなどを用いて,インタラクティブな操作感を提供する.ユーザーは矢印キーやタブキーでメニュー項目間を移動したり,エンターキーで選択を確定したりすることができる.今回のlazygitとlazydockerはVimのキー操作ができるので,Vimをよく使う人も使いやすい仕様になっている.(Vimの使い方はこちらから(Vimチートシート))
TUIの利点としては,GUIに比べて軽量であり,リソースの少ない環境や,リモートサーバーへのSSH接続時などでも快適に動作する点が挙げられる.また,キーボード操作が主体であるため,熟練ユーザーにとっては非常に効率的な操作が可能となる.
代表的なTUIアプリケーション
テキストエディタのVimやEmacs,ファイルマネージャーのMidnight Commander,そして先述のlazygitなどがある.
lazygitインストール方法
lazygit
Windows
- Scoop を使ったインストール
scoop install lazygit
- Chocolatey を使ったインストール
choco install lazygit
macOS
Homebrew を使ったインストール
brew install lazygit
コマンドでインストールできない場合
-
手動インストール
GitHubのリリースページから最新のそれぞれのOS用のバイナリをダウンロードし,PATHの通ったディレクトリに配置する - Go言語がインストールされている環境
go install github.com/jesseduffield/lazygit@latest
インストール後は、ターミナルまたはコマンドプロンプトで対象のディレクトリで以下のコマンドをと入力して実行すれば良い.
lazygitの場合
lazygit
前提状態
本記事で使用するgitリポジトリの構成は以下のファイル構成で説明する.
.
└── README.md
masterブランチでREADME.mdを作成し,そこからdevelopブランチを作成し,developブランチからfeature/001ブランチと,feature/002ブランチを作成した状態で説明する.
lazygit開始方法
対象のディレクトリで以下のコマンドを実行するとlazygitを始めることができる.
lazygit
終了するには,
q
キー
開始したら以下の画面になっている.
上下左右の移動はvim操作でも矢印キーでもOK
1つ戻る際はesc
キー
決定はreturn
キー
実行はspace
キーが基本操作
モード切り替え
1
, 2
, 3
, 4
, 5
を押してモードを切り替える.マウスクリックでも切り替えができる.
また,各モードにおいてコマンドのヘルプを出すには?
を押すと確認できる.
ヘルプのコマンドを選択して
return
を押すと
gitリポジトリ・作業ブランチの確認・操作履歴とコミット履歴の確認
1
を押すと現在のgitリポジトリと現在のブランチを確認できる.
このモードでa
を押すと操作履歴とコミット履歴を確認できる.(git log --oneline --graph --all)
変更差分(git status)・ワークツリー・サブモジュールの表示
2
を押した時の挙動
変更差分→ワークツリー→サブモジュール
ローカル・リモートブランチ(git branch (-a))・変更履歴(git log)・リモートリポジトリのURL(git remote -v)・タグ(git tag)の表示
3
を押すとローカルブランチを表示する(git branch)
選択中のブランチにおける変更履歴も表示する(git log)
もう一度3
を押すとリモートブランチを表示する(git branch -a)
リモートリポジトリのURLも表示する(git remote -v)
対象のリモートブランチ名(origin)を選択し,return
を押すとリモートブランチが表示される.
緑色になっているブランチがローカルにないブランチ
3
を押し,tagsのページまで行くと,とタグが表示される(git tag)
3
を押した時の挙動
ローカルブランチ・変更履歴→リモートブランチ・リモートリポジトリのURL→タグ
コミット履歴・詳細差分(git show)・操作履歴(git reflog)の表示
4
を押すとコミット履歴を表示する.(git log --pretty=format:"%h %s" --graph)
選択中のコミットにおける詳細差分も表示する(git show)
もう一度4
を押すとローカルリポジトリにおける操作履歴を表示できる(git reflog)
4
を押した時の挙動
コミット履歴・詳細差分→操作履歴
変更差分の待避(git stash list)の表示
5
を押すと変更差分を一時退避したものを一覧表示する(git stash list)
ファイルをステージング(git add)・ファイルのステージングを解除(git restore --staged)
2
を押してFilesのページに移動.ステージングしたいファイルを選択し,space
を押す(git add)
ファイル名が緑色になったらステージングしている証拠
ステージングしているファイルを選択し,space
を押すとステージング解除
その他 add restore --staged操作
-
全てのファイルをステージングしたい場合は
a
を押す.(git add .) -
全てのファイルのステージングを取り消したい場合は全てのファイルをステージングした状態で
a
を押す.(git restore --staged .)
コミットする(git commit)
addした後にc
を押したら,コミットメッセージを入力できる.入力後return
を押したらステージングしたファイルをコミットする.
4のcommitsにコミット履歴が追加される.pushしていないコミットは赤色になっている.また1のstatusに↑1がつき,リモートリポジトリと比較して1コミット先行していることがわかる.
1つ前のコミットを編集する(git commit --amend)
addした後にA(大文字)
を押すと1つ前のコミットにファイルを追加できる.
ローカルブランチでのリセット(git reset)
2のfilesでg
を押すとローカルブランチを上流ブランチ(通常はリモートブランチ)の状態にリセットする(git reset @{upstream})
--soft --mixed --hardのオプションも選択できる
3のLocal branches(またはremote branches)でg
を押すと現在のブランチを選択したブランチの状態にリセットする.(git reset [branchname])
4のcommitsでg
を押すと選択したコミットまでリセットする.(git reset [commithash])
ローカルブランチを作成し,切り替える(git checkout -b)
3のLocal branchesでn
を押し,ブランチ名を入力しreturn
を押すとローカルブランチを作成し,切り替える操作ができる.
ローカルブランチの切り替え(git checkout)
3のLocal branchesで切り替え先のブランチを選択し,space
でブランチを切り替える.
ローカルブランチの削除(git branch -d)
3のLocal branchesで削除したいブランチを選択し,d
を押し,一番上のDelete local branchを選択し,return
を押すと削除できる
現在の作業ブランチそのものは削除できないので他のブランチに移動してから削除すること
ローカルブランチのマージ(git merge)
3のLocal branchesでマージ先のブランチに切り替える,その後,マージ元のブランチを選択してM
を押してマージする.マージするオプションはいつもの3種類から選べる.詳しくはこちらから
作業中の変更を一時保存(待避)(git stash)
一時退避する(git stash push)
2のfilesでs
を押すと,現状の変更を一時退避できる.
すると,5のstashのところに保存され,変更差分がなくなる.
退避した変更を適用する(git stash apply)
5のstashで対象のstashを選択し,space
を押すと選択しているstashを適用する.
2のfilesに変更差分が戻り,5のstashから適用したstash(「stashしたよ〜」)が消えてなく,listに残っていることがわかる.
退避した変更を適用してstashリストから削除(git stash pop)
5のstashで対象のstashを選択し,g
を押すと選択しているstashをpop(stashを適用してリストから削除)する.
2のfilesに変更差分が戻り,5のstashから適用したstash(「stashしたよ〜」)が消えていることがわかる.
stashを削除(git stash drop)
5のstashで削除したい対象のstashを選択し,d
を押すとstashを削除できる.
リモートブランチをチェックアウト(git checkout)
対象のリモートブランチ名(origin)を選択し,return
を押すとリモートブランチが表示される.
チェックアウトしたいリモートブランチを選択してspace
を押して,new local branch
を押し,return
を押すとチェックアウトできる
ローカルからリモートへの同期(git push)
任意のモード(どこでもいい)でSHIFT
+P
を押すと現在の作業ブランチでpushできる.
このとき3のlocal branches の作業ブランチの右側がPushingになる
リモートからローカルへの同期(git pull)
任意のモード(どこでもいい)でp
を押すと現在の作業ブランチでpullできる.
このとき3のlocal branches の作業ブランチの右側がPullingになる
とりあえずここまでの動作がわかれば普段の開発で行うgit操作はできる.これ以外の操作をしたい場合はgit/ghコマンドチートシートで記載しているコマンドを実行した方が良いと思う.ただし,普段から多用するadd commit はlazygitを使うと快適なgitライフが送れるようになると思う.