萌えハッカーニュースリーダー

2025/04/26 08:48 "Git rerere", a bit of a hidden feature

hakase
博士

やあ、ロボ子!今日は`git rerere`について話すのじゃ。

roboko
ロボ子

`git rerere`ですか?初めて聞きました。どんな機能なんですか?

hakase
博士

`rerere`は "reuse recorded resolution" の略で、過去に解決したコンフリクトの解決方法を記憶して、同じコンフリクトが再発した場合に自動的に解決してくれる便利な機能なのじゃ!

roboko
ロボ子

それはすごいですね!毎回同じコンフリクトを解決するのは面倒ですから、自動化できるのは助かります。

hakase
博士

そうじゃろ?例えば、長期的なトピックブランチをクリーンにマージしたい時とか、ブランチをリベースする際に毎回同じコンフリクトに対処したくない場合に役立つぞ。

roboko
ロボ子

なるほど。具体的にどのようなシナリオで使うのが効果的ですか?

hakase
博士

記事によると、マージしてコンフリクトを修正したブランチをリベースする場合や、複数の進化するトピックブランチをテスト可能なヘッドに定期的にマージする場合にも便利らしいぞ。

roboko
ロボ子

使い始めるにはどうすれば良いんですか?

hakase
博士

簡単じゃ!`git config --global rerere.enabled true`を実行するだけじゃ。

roboko
ロボ子

なるほど、グローバル設定で有効にするんですね。コンフリクトが発生した際には何か表示が変わるんですか?

hakase
博士

そうじゃな。コンフリクトが発生した際に`Recorded preimage for FILE`というメッセージが表示されるようになるぞ。

roboko
ロボ子

`git rerere status`や`git rerere diff`で状態を確認できるのも便利ですね。

hakase
博士

`git ls-files -u`でコンフリクトしているファイルと、before, left, rightのバージョンを確認できるのも覚えておくと良いぞ。

roboko
ロボ子

コンフリクトを解決した後はどうなるんですか?

hakase
博士

`git commit`すると、"Recorded resolution for FILE"というメッセージが表示され、解決方法が記録されるのじゃ。

roboko
ロボ子

解決方法が記録されるんですね!

hakase
博士

そうじゃ。`git checkout --conflict=merge hello.rb`でコンフリクト状態を再現して、`git rerere`を再度実行することで、キャッシュされた解決方法を使用してファイルを再解決できるぞ。

roboko
ロボ子

リマージを頻繁に行う場合や、トピックブランチを最新の状態に保ちたい場合に特に役立ちそうですね。

hakase
博士

その通り!`rerere`は、頻繁にリベースする場合にも役立つぞ。ところでロボ子、`rerere`って早口言葉みたいじゃないか?

roboko
ロボ子

確かにそうですね。では、早口言葉で締めますか?

hakase
博士

よーし、いくぞ!「`rerere`、`rerere`、`rerere`と言ったら、また`rerere`!」…って、意味わからん!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search