2017-08-23 14 views
11

私は約30以上のコミットを超えた機能ブランチを持っています。一方、開発ブランチでは他の開発者からいくつかの機能が追加されています。そのため、毎回新機能は開発に公開され、私がするように求めています:任意の gitの開発ブランチに機能ブランチをリベースする方法

  • があなたの機能ブランチで開発を続けた場合、私の機能ブランチに

    1. リベースの開発ブランチ
    2. 解決の競合を

    問題

    第2ステップはここではチキンの首です。 rebaseで、それは私にの矛盾を与え、すべてのそのブランチのコミット。これは本当に反復的で冗長です。私のブランチでの自分の作業が進行中であるため、開発ブランチをすぐにrebaseすることはできません。

    私は何を試しましたか?squash

    1. し、可能な限り自分のコミットを減らす(これはつぶすためには何もない時代のほとんどとして、少なくとも役立ちます)
    2. 変更を行くに私をstash、開発をリベースした後、unstash私の変更。 (ただし、ここでも葛藤があります)
    3. -preserve-mergesをrebaseに使用しています。 (しかし、ここでは誰もが、これは完全にで使用することがを落胆することを叫ぶ)だから、

    を、機能ブランチ自体は、多くのコミットをしていたときに少なくとも競合に機能ブランチに開発をリベースに対処する最適な方法は何ですか。私はより鮮明であり、参考になる説明(またはリンク)をつけた返信は進めるのに大いに役立つでしょう。

  • 答えて

    7

    ワークフローは健全です(リベース)。
    しかし、競合は毎回何度も解決されるべきではありません。そのために

    、あなたは git rerereを持っている:それは( git config --global rerere.enabled true)を活性化、矛盾最後の時間を解決(または manual re-training、または use contrib/rerere-train.sh行う)、そしてあなたの次のリベースはあなたの次のリベースで、これらの紛争解決は再使用されます。

    +0

    これは確かに試してみてください...ありがとう –

    +1

    @KaranDesaiもう一度あなたのマージの競合を解決する必要がないように、私はあなたが言ったように、あなたは再訓練をすることができます。再訓練が完了したら、rebaseをもう一度試すことができます。(過去のコミットについて) – VonC

    3

    私はに小文字の(1日か2日)を指定しておくことをお勧めします。また、フィーチャーブランチも小さくなります。 別の方法は、何かが開発ブランチにプッシュされるたびにリベースするのではなく、ときどきだけ、またはマージの前に一度だけリベースすることです。 もう一度この機能を小さくしておくか、あまりにも多くの衝突を一度に処理する必要があります。

    ご質問については、リベースの競合の回数を最小限に抑えることはできません。矛盾がある場合は避けることはできません。

    しかし、あなたが助けることができる方法があります:rerereの再利用録画解像度の略です。これにより、gitは競合の解決方法を記録し、次に競合が発生したときに解決が再適用され、競合が解決済みであることがわかります。これはあなたのワークフローをスピードアップします。

    あなたはをリベースにgitを実行する前に、機能ブランチに開発ブランチからをマージのgitにしてみ

    git config --global rerere.enabled true 
    
    +0

    Woah rerereはまれですが、(それはわかりませんでした)。以前の回答にも同じ提案がありました。それをグローバルに有効にするための構文を追加するには+1してください。 –

    0

    でグローバルにrerere有効にすることができます。途中でもっと情報になるでしょう。

    関連する問題