あなたはそれを複雑にしすぎています。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に置き換えて、コミット順序を決定する「彼が最初に得た」方法を使用することができます。