Gitでマージ時のコンフリクトの解決を記憶させるrerere

Git

はじめに

よくGitを利用する際にひんぱんにマージして開発ブランチも最新に・・・とはいっても難しいですよね。
そこでrerereを使うのがよさそうです。

reuse recorded resolution

の、略だそうです。
レレレを有効にするとマージ時のコンフリクトの解決を記憶させることができ、同じ作業を繰り返す必要がなくなります。

有効にするためには

か、個別のリポジトリだけに反映するなら
.git/rr-cache
と、.gitディレクトリの中にrr-cacheディレクトリを作成すると保存されます。

masterはこうなっています。

tmp.coffee(master)

branch1ブランチを作成してこうします。

tmp.coffee(branch1)

masterに戻ってこうします

tmp.coffee(branch1)

そして、masterにbranch1をマージするとコンフリクトが発生します。

普段のコンフリクトですが Recorded preimage for 'tmp.coffee'という一文がふえました。
rr-cacheの中にbca36491009407a00892fc9b2abeeef9743xxxxxというディレクトリが発生しました。
この中にpreimageというファイルがあり中身はpatchファイルのようです。

今回の例では両方の修正を取り入れたかたちにしてコンフリクトを解決します。

そしてコミットすると

Recorded resolution for 'tmp.coffee'.とでました。
このとき、rr-cacheのディレクトリにはpostimageというファイルが作成されます。
中身はコンフリクト解決後の状態が格納されていました。

一旦 git reset --hard HEAD^などでmasterをマージ前の状態に戻します。
branch1ブランチに行きmasterをマージすると・・・

自動的に解決されました。
rerereを細かくやっていくことによって、ビッグバンマージを避けることができるようになります。

この記事を書いた人

鈴木
鈴木juke / footworker
和服とvapeとСистемаと醗酵とたまごふわふわとシャッフル(RUS)とjuke/fwkに傾倒する人です

Git