3

しばらくの間解決策を探していましたが、私はgitの専門家からはほど遠いので、解決策に近づいても、それを実行するために少し変更することはできませんでした。

私はここで提案されているように仕事をしようとしてきました:http://nvie.com/posts/a-successful-git-branching-model/、しかし急いで、ホットフィックスのために分岐している間ではないので-私は分岐しましたマスターではなく開発からオフ。

簡略化すると、次の履歴があるとしましょう。

A---B---C--------D---- < developer
\      / \      /
 R1--R2   H1---H2
       \         \
--------X---------Y--- < master

R1とR2はリリースブランチコミットであり、問​​題ありません。ただし、H1とH2はホットフィックスブランチコミットであり、H1はC(dev)ではなくX(master)からブランチする必要があります。XコミットとCコミットの両方の背後に同じコードがあるので、代わりにXからH1ブランチを作成することは可能ですか?

私はそれをこのように見せたいです:

A---B---C--------D---- < developer
\      /        /
 R1--R2   H1---H2
       \  /      \
--------X---------Y--- < master

これはコードをまったく変更しません。一貫性を保ち、必要な場所からブランチを開始したいだけです。事は-devとmasterブランチの両方で後でいくつかのコミットがあります。H1-H2ブランチは、基本的に1か月以上前のものであり、後で100を超えるコミットがあります。

私が述べたように、私はgitの初心者であり、リベースなどで遊んでいますが、それはひどく間違っていました。

これに対する治療法はありますか?

4

1 に答える 1

2

H1を書き直さずにそれを行うことはできません。次に、H2を書き直します。これは、DとYの両方を書き直すことも意味します。したがって、すべてのコミットを変更して再公開する必要があります。また、すでに公開されているコミットを再公開することは、一般的に悪い考えです。したがって、それほど大きな問題ではない場合は、それを行うのではなく、そのままにしておく必要があります。

それでもやりたい場合は、次のように行うことができます。

  • Xに基づいて新しい(一時的な)ブランチを作成します。
  • チェリーピックH1; 結果のH1'はXに基づいています。
  • チェリーピックH2。
  • マスターをXにリセットします(git reset --hard X)。
  • 一時ブランチをマスターにマージします。
  • 一時的なブランチを削除します。
  • 開発者をCにリセットします。
  • マスターを開発者にマージします。
  • forceオプションを使用して両方のブランチを公開します。
于 2013-01-04T18:30:52.153 に答える