GITはSCM方法論の実装というよりもSCMフレームワークの実装であるため、実際には3番目の可能性があります。この3番目の可能性はに基づいていrebaseます。
rebaseGITサブコマンドは、(一般的に、あなたの分岐点から、あなたのトピックブランチの先端にコミットする一連の取りtopic)と(例えば、一般的に、統合ブランチの先端にどこかにそれらを再生しますmaster)。このrebaseサブコマンドは、新しいコミットを生成します。これにより、確認しやすい形式でコミットを再配置することができます。これにより、topic以前と同様の新しい一連のコミットが生成されますが、統合ブランチの最上部に根付いているように見えます。この新しいブランチはまだtopicGITによって呼び出されるため、古い参照は破棄されます。topic-0ブランチの元の状態などを非公式にラベル付けtopic-1し、さまざまなリファクタリングを行います。
あなたのtopicブランチに対する私の提案は次のとおりです。
(オプションステップ)あなたが対話的にあなたのトピックブランチをリベースtopicその分岐点に(参照--fixupのためのオプションcommitと-iして--autosquashのオプションをrebaseあなたのレビューが容易である方法であなたのコミットを書き換えるための機会を与えます、)。これにより、ブランチが作成されtopic-1ます。
統合ブランチの最上部でトピックブランチをリベースします。これはマージを行うのと似ていますが、単なるソフトウェアエンジニアリングアーティファクトであるマージで履歴を「汚染しません」。これにより、ブランチが作成されtopic-2ます。
topic-2の先端に対してそれをレビューするチームメイトに送信しますmaster。
よければtopic-2、それをマスターにマージします。
NOTE枝- 枝が木になるすべてのため、プロセスの最後に、唯一の支店は、GITによって同じと呼ばれるコミットを指しtopic-2GITに名前を持っています。
長所:
- 廃止されたコードはレビューされていません。
- 偽の「外部マージ」レビュー(1日で説明した現象)はありません。
- クリーンな方法でコミットを書き換える機会。
短所:
- 1つのブランチの代わりに、
topic-03つのブランチアーティファクトtopic-0が topic-1ありtopic-2、それらはコミットツリーに作成されます。(ただし、GITで名前を持っているのはいつでも1つだけです)。
最初のシナリオでは、«誰かが「1」の間に何かをマージした場合 「2.」»は、分岐点の作成からマージを決定するまでの時間を指します。このシナリオでは、«誰かが「1」の間に何かをマージした場合 「2.」»は、リベースからマージまでの時間を指し、通常は非常に短い時間です。したがって、私が提供するシナリオでは、masterワークフローを大幅に乱すことなく、マージの時間の間ブランチを「ロック」できますが、最初のシナリオでは実用的ではありません。
体系的なコードレビューを行っている場合は、適切な方法でコミットを再配置することをお勧めします(オプションのステップ)。
中間ブランチアーティファクトを管理するのは、リポジトリ間でそれらを共有する場合にのみ困難です。