2015-12-15 24 views
8

git rebaseは、git mergeよりも競合しがちですか?ための仕組みにgit rebaseはgit mergeよりも多くの競合を作成しますか?

  1. :私は前に、それがthis post

    で参照されて、私はここにanecdataに基づいて推測していますが、私はリベース周りの一般的な不安は、2つの主要な場所から茎を疑うことを聞いてきましたGitのリベース、マージの競合がに、詳細には触れません

作者に対処するために、より頻繁かつ一見困難ですその主張を正当化するが、私がそれを聞くのは初めてではない。

私は、リベース再生がコミットによってコミットするため、同じ競合で数回終了するという点を聞いて理解していますが、私はそれに遭遇したことはありません。 rerereの動作がデフォルトのgit rebaseになっている可能性がありますか?

チームにリベースポリシーを提案しようとしていますが、正確であればこの問題に対処したいと思います。

正直なところ、両方のブランチの変更がリベースまたはマージに関係なく矛盾するため、同じ数の競合が発生することが予想されます。つまり、最後にブランチが収束してもコンフリクトは発生しません。同じ行に並行して変更すると原因になります

答えて

7

コミットが複数ある場合は、リベースとの競合が増えます。これは、リベースするときに、コミットごとに競合を解決する必要があるからです。つまり、マスターよりも5コミット分先のブランチをrebaseしようとしていて、それらの5つのコミットの最初にマージ競合を導入した場合、次の各コミットでその競合を解決する必要があります。

リベースでは、上記の問題を解決することがよくあります。また、単一のコミットに縮小しようとすると、リベースよりも簡単な戦略があることにも言及する価値があります。

マスターでマージしたい5つのコミットがあるとしますが、説明的なメッセージで1つのコミットで簡単に記述できるのは1つの機能だけです。

git fetch 
git merge origin/master 
git reset --soft origin/master 
git commit 

単一のコミットが必要な場合は、これは簡単ですし、リベースと同じことを実現します。

+2

単一の(マージされない)コミットを作成するより簡単な方法は、 'git merge --squash origin/master'と' git commit'を使うことです。 – sschuberth

+0

あなたはより詳細に説明することができますなぜ私は競合を複数回解決する必要がありますか?私がファイルfooに触れた後で 'master'で最初のコミットを言う。そして、私の支店での最初のコミットもfooに触れたと言うと、これはmasterにrebasingするときに紛争を引き起こしますが、masterで2番目のcommitがbarに触れ、私の支店で2回目のcommitがfooに触れ続けているとすれば、同じ争いをもう一度解決するには? – Hilikus

関連する問題