0

1つのローカルブランチmasterがあり、2つのリモートブランチmasterとを追跡しdev-meます。一方、別の開発者は自分のローカルを持っており、同じリモートと自分の専用のリモートブランチmasterを追跡しています。masterdev-other

時々、私たちはそれぞれ自分のローカルmasterからリモートの開発ブランチ(つまりdev-meまたはdev-other)にプッシュします。dev-x次に、リモートブランチをリモートブランチにマージしますmaster

私は次のことを考えています:

  1. 私たちのどちらかが彼のリモートブランチをリモートブランチにマージします。dev-xmaster

  2. 他の人は、このマージされたリモートブランチから自分のリモートブランチにリベースします。masterdev-x

  3. 手順2)の同じ人が、リモートブランチにマージして戻ります。master

これは正しいアプローチですか?

4

2 に答える 2

0

分岐を適切に使用していません。私の投稿を見て、どの開発者がどのマスター ブランチとメイン ブランチを持っているかに焦点を当てるべきではないことを確認してください。進行中のブランチまたは機能ブランチに焦点を当て、他のブランチを使用してそれらの統合を管理する必要があります。

http://dymitruk.com/blog/2012/02/05/branch-per-feature/

于 2012-08-01T03:14:33.493 に答える
-1

あなたはそれを複雑にしすぎています。gitのすべてをローカル操作と見なし、他の人を無視し、リモートリポジトリを共有ストレージ領域と見なします。

(私があなたを正しく持っているなら)あなたはそれぞれマスターで働いているように聞こえますが、origin/masterとorigin/dev-somethingの両方にプッシュします。これは機能しますが、混乱する可能性があります。マスターで作業している場合は、マスターにプッシュします。dev-somethingにプッシュする場合は、dev-somethingのローカルコピーで作業します

あなたがそれを持っているように聞こえるので、あなたがすべてのリモートのものをマージしたいなら、これをしてください:

git fetch --all
git checkout master
git merge origin/master origin/dev-me origin/dev-other
[resolve conflicts]
git push origin master:master

リベースを使用する場合は、各リモートブランチをマスターに順番にリベースする必要があります。これは、線形の履歴を提供しますが、並列開発の現実を実際に表すものではありません。さらに、誰の変更が「最初」になるかを決定する必要があります。

それぞれがローカルのdev-whateverブランチで作業し、そのブランチのアップストリームバージョンに排他的にプッシュする方がよいことをお勧めします。コードをマスターに取り込みたい場合は、マスターのローカルコピーをチェックアウトし、devのローカルコピーをマージして、ローカルマスターをバックアップします。したがって:

git checkout dev-whatever
git fetch --all
git merge origin/dev-whatever
[hack hack hack]
git commit -a
git push origin dev-whatever:dev-whatever
[decide you want to integrate what you've got into master]
git checkout master
git merge dev-whatever
git push origin master:master

両方がこれを行うと、それぞれが自分の変更を統合することになります。同僚がすでにプッシュしている場合、自分のプッシュが変更にマージされていると、プッシュは失敗します。心配しないでください。その時点で行う必要があるのは次のとおりです。

 git fetch --all
 git merge origin/master
 [resolve conflicts]
 git push origin master:master

この場合、mergeをrebaseに置き換えて、コミット順序を決定する「彼が最初に得た」方法を使用することができます。

于 2012-07-31T23:24:14.243 に答える