2013-01-09 4 views
10

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

さらに重要なのは、このようなシナリオで私の最初の戦略はどうだったのでしょうか?

答えて

8

タスクは、単に代わりmasterの別のブランチを使用していたので、あなたは単に完全masterブランチを削除するか、のは言わせして名前を変更することができます - 別のブランチを取ると、masterに名前を変更し、その後、legacy。それでおしまい。

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 

ローカル我々が今行われています。ここでは、ローカルおよびGitHubの上の目標を達成するために実行する必要がある場合があります実際のコマンドです。しかし、単にGitHubのブランチmasterを削除することはできません。最初にデフォルトの別のブランチを作成する必要があります。これはリポジトリ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にデフォルトのブランチを切り替えます。さらに、移行処理中に作成した余分なブランチをすべて削除することもできます。

また、すべての操作を履歴に保存する場合は、正しい回答hereを確認してください。

+1

「レガシー」をどうやって削除しますか? –

+1

ポイントは、ちょうどの場合、遺産を残すことでした。レガシーが必要ない場合は、単に他のブランチと同様に削除することができます:http://stackoverflow.com/questions/2003505/how-do-i-delete-a-git-branch-both-locally-and- in-github – jayarjo

+0

素晴らしい、ありがとう。 – Dogweather

2

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

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

最初に何をしたらよいですか?

  • 初期枝
  • にいくつかのユニットテストおよび/または統合テストコードを追加し、新たな変化のための
  • がテスト
  • を追加する第二の枝の上に同じ統合テストを実行します。その後、変更の作業を確認することができます両方のブランチに対して

更新:両ブランチへの変更を管理するための 、あなたはおそらくのようなプロセスを必要とする: - ブランチ-Rに主に働きますあなたが完了したときにすべての "ストーリー"または作業項目をブランチレガシーにマージする

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

+2

私はユニットテストを受けました。それは私の懸念ではありませんでした。よりクリーンなgitの履歴を取得するためのより良い戦略があるかどうかを知りたかっただけです。 – jayarjo

関連する問題