2012-02-12 23 views
8

git rebaseを使用してコミットメッセージを変更することはできますが、マージ競合を再解決する必要はありませんか?マージ競合を解決せずにgit rewordをもう一度

私は古いレポを振り回す必要があります。実際のコードやメッセージだけを変更する必要はありません。

私は--preserve-mergesを試しました。

答えて

9

"再利用記録解像度"と呼ばれるgitには、あまり知られていない機能があります。

グローバルに有効にするには、git config --global rerere.enabled 1を実行します。

rerereが有効になっていると、gitは自動的に競合の解決を保存し、同じ競合に遭遇した場合には後で再利用します。これは、以前に見られた競合をユーザーが再解決する必要がないという最終的な結果をもたらします。

この機能の詳細については、a post on git-scm.comで説明します。詳細は、help document for git rerereをご覧ください。

+5

これは最初にマージしたときに有効になっていれば残念ですが、残念ながらこれは手遅れです。 Gitのソースのcontrib部分に[rerere-trainというスクリプト(https://github.com/gitster/git/blob/master/contrib/rerere-train.sh)というスクリプトがあります。これは既存の歴史を経て再公開されます既存のマージから競合の解決法を学ぶ - それがうまくいくとすれば、それはあなたを助けるだろう。 – Cascabel

1

注:contrib/rerere-train.shスクリプトを再トレインrerere(あなたがmanual retraining hereを見ることができます)

rerereはすべて、現在のリベースの解像度を忘れたことを確認することになっているので、あなたが今のGit 2.14.xとの公式のオプションを持っています/2.15(Q3 2017)contrib/rerere-trainの場合:--overwriteフラグ。

commit ad53bf7(2007年7月26日):Raman Gupta (rocketraman)を参照してください。

contrib/rerere-train(​​にJunio C Hamano -- gitster --によって合併、2017年8月11日)
:必要に応じてユーザに --overwriteフラグを使用して既存の解像度を上書きするオプションを提供し、既存の解像度

を上書きします。

これは、競合のためにエントリがすでにrerereキャッシュにあることがわかっているが、そのエントリを削除して、rerere-cacheに渡されたマージコミットに基づいてリトレインしたい場合などに使用できます。列車のスクリプト。

関連する問題