5

次のような状況があります。

A---B---F---G---H (master)
     \
      \
       C---D---E (experimental)

私の問題は、 B が に起こってはならない非常に悪いことだということですmaster。に属しexperimentalます。ただし、F---G---Hは大丈夫です。すべてを次のようにする方法はありますか。

A---F'---G'---H' (master)
\
 \
  B---C---D---E (experiment)

私はリベースなどについて読んだことがありますが、最大の問題はそれmasterが にプッシュされたことoriginです。

4

2 に答える 2

5

マスターで、次を実行します。

git revert B

そのコミットの下流の変更が直接影響を受けない場合は、安全にプッシュできます (つまり、コミットの内容は、Bその後の他の変更を混乱させることなく削除できます。確かにそうです)。

これにより、次が作成されます。

A---B---F---G---H---I (master)
     \
      \
       C---D---E (experimental)

I元に戻すコミットはどこにありますか。マスターは、 の内容を削除している間、その履歴を保持します。B試験運用版はBの変更を保持します。

I後で実験的をマスターにマージする場合は、コミットを元に戻す必要がある場合があります。

于 2012-08-28T16:09:32.323 に答える
3

git rebase --onto A B masterしましょう。

マスターがすでにorginにプッシュされているようです。オリジンのマスターブランチを上書きしても安全であることが確実な場合は、git push -fマスターブランチでonを実行してください。他の開発者がオリジンからプルするときに競合が発生する可能性があることに注意してください。

一般に、パブリックリポジトリのブランチはそのままにしておく必要があります。つまり、マスターからコミットBを削除することは期待できません。実行できるのは、新しいコミットでコミットBによって生じた間違いを修正し、マスターに再度プッシュすることだけです。

チームメンバーにリベースについて通知することが可能であり、そうするように主張する場合は、書き直しても問題ありません。これがあまり頻繁に起こらないようにしてください。

于 2012-08-28T16:02:15.577 に答える