2017-07-19 7 views
1

私たちは、この分岐構造を持っている:リセットしてすべてのユーザーにローカルバンチを適用するにはどうすればよいですか?

  • マスター(生産に配備/ビルド)
  • QA(Q &環境に配備/ビルド)
  • だから、我々が作成枝

ていますマスターからのフィーチャーブランチを作成し、次にQ &でフィーチャーを検証する必要があるときにqa(マスターから作成)にマージします。

いくつかの開発がマスター(小さなものやバグ修正)に直接マージされたため、時にはmasterからqaを再構築する必要があります。

私が何をしたか

git checkout qa 
git reset --hard master 
git push --force origin qa 

だから、リモート、私はそれをしたい正確に同じようになりました。

しかし、他の開発者がgit fetchを実行すると、ローカルにあるqaのすべてのコミットが発信コミットとして表示されます。これは論理的です。すべてのマシンでgit reset --hard origin/qaを実行する必要がありましたが、危険です。

他の解決方法はありますか?

EDIT:なぜ私たちはこれをやっているのですか?qaブランチ上にあった機能が放棄されたので、masterからqaブランチを再作成して、他のすべてのブランチにマージする必要があります。

+1

私は実際にあなたのユースケースを理解していません。なぜあなたはqaをマスターに簡単にリベースできませんでしたか? –

+0

私は理解していない - 'qa'を' master'にリセットして 'preprod'ブランチを押しますか? – phd

+0

@phd、私の悪い誤字、私はそれを編集しました –

答えて

0

git push --forceを実行した後、すべてのクライアントを強制的にプルする唯一のオプションです。クライアントにブランチqaを保存する一時的なブランチを作成し、強制的にプルし、チェリーピックを保存したままqaからコミットし、一時ブランチを削除します。

0

Adam Dymitrukのワークフロー "branch per feature"を使用しています(おそらく知らないかもしれません)。それは確かに素晴らしいワークフローです。 Dymitrukは最初から再作成qaに示唆

注(すなわち、masterから)あなたは、あなたが「結合解除」機能たくないだけを、変更するたび。

つまり、qaブランチを削除して完全に再構築します。その中にあるすべてのフィーチャーブランチをまったく同じ順序でマージするよう注意します。もちろん、git rerereキャッシュを有効にして、すべてのデバイスがそのキャッシュを互いに同期させるようにしてください(もちろんgitを使用してください)。

このように、奇妙なマージやリセットはどこにもないでしょう。たびに清潔で新鮮なqaがあります。操作全体は、スクリプトの助けを借りて、またはCI/CDエージェントによって自動的に行われるのが最善です。

詳しくは、Dymitrukのサイトを参照してください。

+0

実際にこのフローを使用しています(それもわかっています)。私たちはqaブランチを削除してマスターから作成しようとしましたが、デベロッパーは新しいqaブランチにはなかったコミットを続けていましたが、古いqaブランチを削除してチェックアウトして機能をマージする必要がありました。 –

+0

@remibourgarel:はい、そうです。このワークフローのこの部分(qaを再作成すること)は、私の目では最大のものであり、チームで正しいものになるための呪いです。 qaに直接コミットすることは厳しく禁止されなければならない、または事態がひどく悪くなる。 – AnoE

+0

実際、VS2017ではこれを避けるためのフックを作成しようとしています(あなたはマージしてあなたの機能に戻るのを忘れてしまったので、 –

関連する問題