web-dev-qa-db-ja.com

同じ競合を何度も解決する必要があるのはなぜですか?

私がする時 git rebase branch1私のbranch1-local競合が発生します。私は対立を解決します、git add <conflicted-add>そしてgit rebase --continue gitが私に頼むように。その後、新しいコミットが適用されます。新しい対立が現れます。しかし、再び同じ対立です!同じファイル!もう一度やります、git addgit rebase --continue、その後、リベースするコミットごとにこれを繰り返すまで、すべてが繰り返されます。

リベースで同じ競合解決を何度もやり直さなければならないのはなぜですか?

44
lurscher

あなたが欲しいのはgit rerere競合解決を記録します。私がこれまでに見た中で最も良い紹介は、 Git Book、ツールの章 の一部です。実際には、リベースを実行すると、以前と同じように停止しますが、マージの競合が解決されていることを確認するだけで済みますgit addそれを続けます。

13
patthoyts

あなたは同じ葛藤を何度も繰り返すべきではありません。 Rerereはここでは役に立ちません。コミットを再生しようとしているコードベースが非常に異なるため、各コミットを調整するためにあなたの助けが必要であることを意味します。それ。これが、リベースよりもマージを優先する理由の1つです。リベースは、通常のワークフローの一部ではなく、必要な場合にのみ使用してください。 Rerereは、マージ/リセットタイプのワークフローでさらに役立ちます。リベースを回避する私のワークフローは次のとおりです。 http://dymitruk.com/blog/2012/02/05/branch-per-feature/

いくつかの苦痛を緩和する1つの方法は、Beyond Compareなどのスマートなマージプログラムを使用することです。これは構文を認識しており、Gitが(当然のことながら)拒否するかなりの数の競合を解決します。多くの場合、これらのツールは、呼び出されたときにUIを開かず、問題を解決し、git mergetoolコマンドが次の競合に進むことを許可しません。 「trustmergetool終了コード」をtrueに設定することを忘れないでください。

4
Adam Dymitruk