タコのマージを実行するときに git merge に指定されたブランチの順序に基づいているように見える予期しない結果がいくつかあります。
次のスクリプトは私の状況を再現します
#!/usr/bin/env bash
rm -rf TEMP
# create area to work in
mkdir TEMP
cd TEMP/
git init
# work on master
echo "hello world" > file
git add file
git commit -m "initial commit"
# create branch which is at the same point as master
git branch hasnt_moved
# create another branch 1 commit ahead
git checkout -b feature_branch_with_work
echo "some interesting work" > other_file
git add other_file
git commit -m "work on feature branch"
git checkout master
# always should also have some work ahead of master
git checkout -b always
echo "some work on always" > other_other_file
git add other_other_file
git commit -m "work on always branch"
# back to master
git checkout master
# now try a merge
#git merge --no-edit --strategy=octopus always hasnt_moved feature_branch_with_work
# however if I had ran this then it would be merged in
#git merge --no-edit --strategy=octopus hasnt_moved always feature_branch_with_work
# I would also expect this to give the same resutls
#git merge --no-edit --strategy=octopus always feature_branch_with_work hasnt_moved
上記のスクリプトを実行した後の私のgitツリーの状態は次のとおりです
最後にコメントアウトされた 3 行が表示されます。以下は各行と、ツリーでそのコマンドを実行した結果のグラフです ( を介して作成されgitk --all
、各コマンドを実行した後、 を介して最初に戻ることができますgit reset --hard hasnt_moved
) 。
次の 2 つのケースは想定どおりです (分岐引数の順序に注意してください)。
git merge --no-edit --strategy=octopus hasnt_moved always feature_branch_with_work
git merge --no-edit --strategy=octopus always feature_branch_with_work hasnt_moved
この最後のケースでは、always ブランチが最終的にマージされた master ブランチに含まれていないため、予期しない結果が生じます (ブランチ引数の順序に注意してください)。
git merge --no-edit --strategy=octopus always hasnt_moved feature_branch_with_work
マージを 1 つずつ実行すると、期待どおりの結果が得られます。
git merge --no-edit --strategy=octopus always
git merge --no-edit --strategy=octopus hastn_moved
git merge --no-edit --strategy=octopus feature_branch_with_work
always
タコのマージに与えられたコミットの順序によって、ブランチがマスターにマージされないことがあるのはなぜだろうかと思っています。