8

どのブランチポイントを何を使用して何に切り替えるかについては、すでに学習しましgit branch -mた。これを行うと、他の人が私のリポジトリからプルするのが難しくなりますか?

ブランチでたくさんのことをしてからtopic1

git branch -m master old_master
git branch -m topic1 master
git push origin master

次に、他の誰かがmaster私のリモートリポジトリからプルします。すべてが正しい場所を指すようにするには、他の誰かが何をする必要がありますか?手順を繰り返すように全員に指示する必要がありますか?

これは、コミットをプッシュして他の開発者にぶら下がっているオブジェクトを残した後、コミットをリベースする問題に似ていますか?

4

2 に答える 2

7

レポがどのように見えるかは正確にはわかりませんが、最悪のシナリオは次のとおりです。

originリポジトリが次のようになっているとします

元:
o---o---A---B---Cマスター

ローカル リポジトリは次のようになります。

ジムパルス:
o---o---A---B---C マスター、オリジン/マスター
         \
          D---E---F トピック1

次に、ブランチの名前を変更すると、ローカル リポジトリは次のようになります。

ジムパルス:
o---o---A---B---C old_master, origin/master
         \
          D---E---Fマスター

これでプッシュmasterするoriginと、早送りではない更新になります。プッシュ後、originリポジトリは次のようになります。

元:
o---o---A...B...C (B & C は孤立したコミットです)
         \
          D---E---Fマスター

これは、上でコミットを行った可能性のある友人にとっては残酷なことですC。たとえば、Sally があなたと一緒に作業していた場合、彼女のリポジトリは次のようになります。

サリー:
o---o---A---B---C オリジン/マスター
                 \
                  G---H---マスター

ここで、非早送りプッシュを実行し、サリーがfetch彼女のリポジトリを実行すると、次のようになります。

サリー:
          D---E---Fオリジン/マスター
         /
o---o---A---B---C  
                 \
                  G---H---マスター

ここで、サリーは自分の作業 (G、H、I) をリポジトリに戻す方法を見つけなければなりません。彼女が単純にマージするとorigin/master、B と C の変更がリポジトリに戻されます (おっと!)。代わりに、彼女はする必要があるcherry-pickrebase、彼女の GHI が に変わりますorigin/master

Git でそれができるのは素晴らしいことですが、それは一種の面倒なことです。サリーが状況に気付くことを本当に望んでいます。これが、変更を適切に処理できるように、これを行うときに他のすべての貢献者に警告する必要がある理由です。

注:上記は最悪のシナリオです。ブランチがCtopic1から出発した場合、その変更早送りであり、問​​題はありません。master

于 2009-04-01T11:46:06.953 に答える
0

基本的に、操作は次と同じです。

# git checkout master
# git reset --hard topic1
# git push origin master

そして、それらはまさにその効果をもたらします。他のすべての人は、最初に分岐した時点までのtopic1ブランチ (ただし、名前masterは彼らにちなんで付けられています) とその祖先を取得します。その後、古いブランチはリポジトリに横たわり、何も指していないため、将来のある時点でガベージコレクションされます。mastertopic1master

あなたtopic1の流れから生まれた枝なら、ここHEADmasterいいでしょう。そうしないと、タグなどを台無しにする可能性のある「履歴の書き換え」状況に陥ります。本当に達成しようとしていることは何なのか、よく考える必要があります。たぶん、シンプルなgit mergeものがあなたに役立つでしょうか?

于 2009-04-01T10:48:20.073 に答える