## 経緯 [[Lazygit]]のv0.41.0がリリースされた。 <div class="link-card"> <div class="link-card-header"> <img src="https://github.githubassets.com/favicons/favicon.svg" class="link-card-site-icon"/> <span class="link-card-site-name">GitHub</span> </div> <div class="link-card-body"> <div class="link-card-content"> <p class="link-card-title">Release v0.41.0 · jesseduffield/lazygit</p> <p class="link-card-description">Hold on tight because this is a HUGE release! This release includes a whopping 595 commits from a period of over 7 months, from 40 different contributors. Thanks to every ... </p> </div> <img src="https://opengraph.githubassets.com/b5db9b1672cb714d37d0f99674b5fe881f12df082b4380c250c1771bc2fe8184/jesseduffield/lazygit/releases/tag/v0.41.0" class="link-card-image" /> </div> <a href="https://github.com/jesseduffield/lazygit/releases/tag/v0.41.0"></a> </div> > Hold on tight because this is a HUGE release! This release includes a whopping 595 commits from a period of over 7 months, from 40 different contributors. とあるように非常に大きなリリースなので、リリースノートを読みながら一通り試してみることにした。 なお、本レポートではすべての項目に対する記載はない。とりわけ以下の項目は除外している。 - 個人的にあまり恩恵を得られそうにないもの - 試してみたが期待通り動かなかったもの ## 前提条件 バージョンアップ前のバージョンは0.40.2。 ```console $ lg --version commit=5e388e21c8ca6aa883dbcbe45c47f6fdd5116815, build date=2023-08-07T14:05:48Z, build source=binaryRelease, version=0.40.2, os=linux, arch=amd64, git version=2.34.1 ``` 基本的には[[Ubuntu 22.04 LTS(Jammy Jellyfish)]] on [[WSL]]上で、[[Neovim]]から[[lazygit.nvim]]経由で利用している。 ## バージョンアップ まずはバージョンアップする。 ```console mise up [email protected] ``` ```console $ lg --version commit=3675570a391b1a49ddd198b4c7e71e17701d4404, build date=2024-03-23T09:09:11Z, build source=binaryRelease, version=0.41.0, os=linux, arch=amd64, git version=2.34.1 ``` ## Videoを見る 以下のVideoを見て気になる点をメモっておく。 ![](https://www.youtube.com/watch?v=_REmkoIyPW0) - スクロールバーがスマートに - 画面最下部にガイドのキーバインドが追加された - ちょっとしたエラーもポップアップではなくそこに - staging view - アイコンの追加 - unstagedが赤ではなく白に - pullやpushなどのステータスがbranchの横に表示されるように - commits - デフォルトでグラフが表示されるようになった - `V`でコミットを複数選択できる - rebase周りの修正が理解できなかったのであとで理解する - `Ctrl+S`でファイルのフィルタ機能 Videoを見終わったのでリリースノートを見ながら機能を確認していく。 ## Range select `v`を押すとステージングやコミットの画面で複数の項目を選択できるようになった。 [[👤jesseduffield]]氏はこの機能によって[[squash (Git)|squash]]が楽になったと具体例を述べている。 > f I need to squash a range of commits I can now easily do it directly rather than needing to squash them one-by-one, or needing to manually start an interactive rebase first. Likewise, it's much easier to select a range of files and stage them than stage them one-by-one. 自分はこの窮地にまだ達せられていないので、複数選択できることを頭の片隅に入れておくかくらいの温度感だ。 ## Auto-wrap in commit editor コミットメッセージが72文字で自動的にwrapされるようになった。wrapされるのは単語の切れ目。`Enter`を押す必要がなくなるとのこと。 `Commit description`の方だけで、`Commit summary`は折り返されないようなので注意。 ### 例 以下のコミットメッセージを入力したとき。 ``` hogehoge hogehoge hogehoge hogehoge hogehoge hogehoge hogehoge hogehoge hogehoge hogehoge ``` v0.40.2だとこう。 ![[Pasted image 20240323205043.png]] v0.41.0だとこう。 ![[Pasted image 20240323205209.png]] ## Easier start interactive rebase インタラクティブな[[rebase (Git)|rebase]]の開始が簡単になった。`i`を押すだけで、現在のブランチの全コミットが対象となるように[[rebase (Git)|rebase]]がスタートする。 ### 例 以下の`branch1`ブランチでコミットした内容を[[squash (Git)|squash]]するケースを考える。 ``` ● a27026e (HEAD -> branch1) Update README2 ● 5c9ce81 Update README2 ● c78e050 Update README2 ● │ 22d8540 (master) Update README3 2 ● │ 838f654 Update README3 ├─╯ ● 6b18530 Update README2 ● 2ebc154 Add README ``` v0.40.2だと、ベースコミットの指定は手動で分岐コミットまで移動して`e`を押す必要がある。 ![[Pasted image 20240323211504.png|frame]] *分岐コミットまで手動で移動する必要がある* ![[Pasted image 20240323211526.png|frame]] *`e`を押すとこうなる* v0.41.0では、適当な場所で`i`を押すと同じことができる。 ![[Pasted image 20240323211648.png|frame]] *カーソルのコミットはどこでもいい* ![[Pasted image 20240323211818.png|frame]] *`i`を押すだけで同じ結果になる* ## Delete remote branches/tags v0.40.2ではリモートのタグやブランチを削除できない。 ![[Pasted image 20240323212517.png|frame]] *ローカルタグを削除していいかの確認だけ* v0.41.0ではリモートのタグやブランチも削除できる。 ![[Pasted image 20240323212541.png|frame]] *ローカルとリモート どちらのタグを削除するか選択できる* ## Find appropriate commit for fixup/amend レビュー指摘などで以前のコミットに含まれる内容を修正したとき、対象コミットへ[[fixup (Git)|fixup]]や[[amend (Git)|amend]]したいケースがある。通常、この探す作業はやや面倒だが、この機能によって`Ctrl+F`を押すと、変更点から対象コミットを推測してくれるようになった。 ### 例 以下の[[コミットグラフ]]を考える。 ``` ● 38edf32 (HEAD -> add-feature) Call sum2 in main ● f81349c Rename sum -> sum2 ● 47eee7f Add sum3 ╭─╯ ● adc9026 (master) Add docs ● 189294a Update main ● 669bc81 Add lib.ts ● 8a3f926 Update index.ts ● e2a4ce6 Init bun ● 1968aa6 Add README ● fe6c089 Add .gitignore ``` `47eee7f Add sum3` は以下のように関数を追加するコミット。 ```ts /** * Sum x and y and z */ export function sum3(x: number, y: number, z: number): number { return x + y; } ``` だが、上記には実装ミス (`z`が加算されていない) があり、後にPRで指摘され修正することにした。その間には2つのコミットがされていた。 ``` ● 38edf32 (HEAD -> add-feature) Call sum2 in main ● f81349c Rename sum -> sum2 ``` この2つのコミットはいずれも`sum3`関数とは直接関係しない変更点である。 ![[Pasted image 20240323215141.png]] ![[Pasted image 20240323215200.png]] ここで、`sum3`の変更を追加するシーンを考える。つまり、以下のような状態。 ![[Pasted image 20240323215325.png]] この状態で`Ctrl+f`を押してみると、自動で関係ありそうなコミット `47eee7f8`がフォーカスされる。 ![[Pasted image 20240323215427.png]] あとは`Shift+a`で対象コミットに対して[[amend (Git)|amend]]してやればいい。`z`が加算されたコミットに書き換わったことがわかる。 ![[Pasted image 20240323215622.png]] > [!thinking] > 個人的には『レビュー修正』みたいなコミットは単なるノイズでしかないと思っている。もしレビュー修正コミットをするなら、なぜ? なにをしたか? をコミットメッセージにして追加コミットするべきだと思っていた。 > > ...が 今回の機能説明を見て **レビュー修正は既存のコミットに混ぜ込んでしまうのが一番良さそう** という考え方に変わった。もちろん、そのブランチ開発が他ブランチと繋がりをもっていなければ...という前提ではあるが。(もしそうだと、[[force push (Git)|force push]]できなくなってしまう...) ## Miscelleneous UI changes UIについて個人的に気になったのはこの4点。他にもスクロールバーの違いなどあるが、その辺は省略している。 ![[Pasted image 20240323223424.png]] あとは、pullやpushがポップアップではなく、ブランチ名の横に表示されるようになったのは地味に良い。並列実行もできるようになったし。 ## 総括 今回は非常に大きなリリースだったが、普通に使っているユーザーにはそこまで影響なさそうな気がした。個人的な収穫としては以下だろう。 - ブランチの[[コミットグラフ]]はもう少しキレイにする努力をしてみようと思った - レビュー指摘修正を[[fixup (Git)|fixup]] or [[amend (Git)|amend]]するという発想がなかった - [[コミットグラフ]]が色々な箇所で表示されるようになったのが嬉しい - ~~治安の悪いレインボーブランチプロジェクトだとコミットメッセージが見えなくなりそうだけど~~ - リモートのタグやブランチが削除できるようになったのはかなり便利 - `Ctrl+s`のフィルタ機能を知らなかったので今後は使いこなしていきたい - 今回のリリースとは直接関係ない (author filterは追加されたが紹介はしていない)