11

同じプロジェクトの 2 つのブランチがあり、最初のブランチの一部が他のブランチよりも劇的にリファクタリングされている状況を想像してみてください。しかし、しばらくの間、両方のブランチを機能させておく必要があるため、バグ修正と重要な機能の追加を両方に行っていますが、対称的ではない場合もあります。そしてある時点で、リファクタリングされたブランチを元のブランチにマージしなければならない瞬間が訪れます。このような状況で使用するのに最適なテクニックは何ですか? 履歴をきれいに保つことはまだ可能ですか?

しかし、もっと重要なことは、そのようなシナリオでの最初の戦略はどうあるべきだったのでしょうか?

4

2 に答える 2

11

タスクは、の代わりに単に別のブランチを使用することだったので、ブランチを完全masterに削除するか、たとえば-に名前を変更してから、別のブランチを取得して名前をに変更できます。それでおしまい。ローカルおよびGitHubで目標を達成するために実行する必要のある実際のコマンドは次のとおりです。masterlegacymaster

git branch -m master legacy               # rename local master to legacy
git checkout legacy
git branch -m another_branch master       # another_branch will be our new master

地元ではこれで終わりです。masterただし、GitHubのブランチを単純に削除することはできません。最初に、デフォルトとして別のブランチを使用する必要があります。これはリポジトリで実行できますSettings > Default Branch。これを行うと、次の手順に進むことができます。

git push origin :master                   # remove master on GitHub
git push origin master                    # push out our new master branch
git push origin legacy                    # push our legacy branch too

次に、に戻り、Settings > Default Branchデフォルトのブランチをに戻しますmaster。さらに、移行プロセス中に作成した可能性のある余分なブランチをすべて削除できます。

または、すべてのアクションを履歴に保存する場合は、ここで正解を確認してください。

于 2013-01-25T08:42:39.413 に答える
2

2 つのブランチがあるため、一方が他方から大幅にリファクタリングされ、両方を維持しています... Git が魔法のように役立つことはないと思います。git が役立つようにするには、ブランチ 1 に適用するパッチ/変更がブランチ 2 と類似している必要があります (ただし、まったく同じである必要はありません)。

リファクタリングされているため、新しいコードが両方のブランチで同じになるようにモジュール化されていない限り、コードは似ていない可能性があります。

そもそも何をすべきだったの?

  • いくつかの単体テストおよび/または統合テスト コードを最初のブランチに追加します。
  • 2 番目のブランチで同じ統合テストを実行する
  • 新しい変更については、テストを追加します
  • その後、両方のブランチで変更が機能することを確認できます

更新: 両方のブランチへの変更を管理するには、おそらく次のようなプロセスが必要です:

2 番目のステップは、ブランチ間でコードがあまりにも異なる場合、大変な作業になると思います。両方のブランチを維持する必要がある場合は、両方のブランチで使用できるライブラリに新しいコードをカプセル化してみてください。これにより、あるブランチから別のクリーナーへのマージが行われます。

于 2013-01-09T20:14:29.033 に答える