補足:タコのマージとタコの分岐点のシナリオは大きく異なります。コミットの DAG (有向非巡回グラフ) 内のポインターは、子 (新しいコミット) から親または親を指すことに注意してください。したがって、タコのマージの場合、2 つ以上の親を持つコミット (コミット オブジェクト) があります。「octopus branchpoint」の場合、親と同じコミットを指すコミットがいくつかあるだけです。
タコのマージ:
1 <---- M
2 <----/ |
3 <------|
タコ分岐点:
P <----- 1
^-------- 2
^-------- 3
したがって、この質問の命名は単に間違っていると思います
答え
ここで、作業領域の変更を異なるブランチ間で分割し、各機能を個別のトピック ブランチに配置する場合は、Gitで明示的なステージング エリア(別名インデックス)を利用できます。
2 つのファイル 'a' と 'b' を変更し、ファイル 'a' の変更をブランチ 'A' に移動させ、ファイル 'b' の変更をブランチ 'B' に移動させたいとします。あなたが現在いるブランチ、あなたが作成したい多くのブランチのベースにしたい分岐点の名前が「マスター」であると仮定しましょう。
まず、ブランチ「A」を作成しましょう
$ git checkout -b A master
Git は次のように応答します。
M a
M b
Switched to a new branch "A"
「M」は、ファイル「a」および「b」が、ブランチ「A」の基になったポイント(「マスター」ブランチ)に関して変更されていることを意味します。(以下では、コマンドライン呼び出しの下に単に git 応答を配置します。応答とは何かを個別に示すのではありません。)
ファイル 'a' の内容をステージング領域 (インデックス) に追加してみましょう。
$ git add a
ファイル 'a' の変更のサブセットのみをブランチ 'A' に追加する場合は、"git add --interactive" (略して "-i") または "git gui" を使用して per-ステージング領域への変更のハンク追加およびその他のそのような操作。
次に、ブランチ「A」に変更をコミットします
$ git commit
Created commit 35d0061: Commit description...
1 files changed, 1 insertions(+), 0 deletions(-)
git-commit に「-a」オプションを使用していないことに注意してください。
ちなみに、ステージング領域からコミットする前に変更をテストしたい場合は、「git stash save --keep-index」を使用して、「git commit」を使用してコミットする状態の作業領域を取得し、変更をテストしてから、 「git stash pop --index」(または「git stash pop」。ここでどれが必要か覚えていません) を使用して前の状態に戻ります。
ここで、ブランチ「マスター」に基づいて、別のブランチ、ブランチ「B」を作成します。
$ git checkout -b B master
M b
Switched to a new branch "B"
ブランチ 'B' に残した変更 (ブランチ 'A' にコミットしなかった変更) が、新しく作成されたブランチ 'B' に移動することが簡単にわかります。ファイルを削除したり、変更を削除したりする必要はありません。他のブランチに何があるかを知る必要はありません。すべてが自動です。
もう一度、ファイル 'b' の内容をステージング領域 (インデックス) に追加し、ブランチ 'B' でコミットします。
$ git add B
$ git commit
これは必要に応じて何度でも繰り返すことができ、新しいブランチでは難しくなりません。
HTH