部分的にマージされたブランチでテストする
前のステップでは、git branch --merged
と git log main ^branch
が完全にマージされたブランチでどのように動作するかを見ました。今度は、部分的にマージされたブランチ、つまり一部のコミットのみが別のブランチに統合されたブランチで何が起こるかを見てみましょう。
まず、my-time-machine
ディレクトリにいることを確認しましょう。
cd ~/project/my-time-machine
partial-feature
という名前の新しいブランチを作成し、そのブランチに切り替えましょう。
git branch partial-feature
git checkout partial-feature
この新しいブランチで 2 つのコミットを行いましょう。
echo "Adding part 1 of the feature" >> partial.txt
git add partial.txt
git commit -m "Add part 1"
echo "Adding part 2 of the feature" >> partial.txt
git add partial.txt
git commit -m "Add part 2"
コミット後、以下のような出力が表示されるはずです。
[partial-feature a1b2c3d] Add part 1
1 file changed, 1 insertion(+)
create mode 100644 partial.txt
[partial-feature e1f2g3h] Add part 2
1 file changed, 1 insertion(+)
次に、master
ブランチに戻り、partial-feature
の最初のコミットのみをマージしましょう。これは git cherry-pick
を使って行うことができます。まず、「Add part 1」コミットのコミットハッシュが必要です。git log partial-feature
を実行し、最初のコミットのハッシュをコピーすることで見つけることができます。
git checkout master
## <commit_hash> を「Add part 1」コミットの実際のハッシュに置き換える
git cherry-pick <commit_hash>
チェリーピックが成功したことを示す出力が表示されるはずです。
[master i1j2k3l] Add part 1
Date: Mon Aug 7 10:05:00 2023 +0000
1 file changed, 1 insertion(+)
create mode 100644 partial.txt
次に、再度 git branch --merged master
を使用しましょう。
git branch --merged master
master
と feature-branch
がリストに表示されるはずですが、partial-feature
は表示されません。これは、partial-feature
にはまだ「Add part 2」コミットがあり、これが master
ブランチにマージされていないためです。git branch --merged
は、すべてのコミットがターゲットブランチに存在するブランチのみをリスト表示します。
最後に、git log master ^partial-feature
を使用しましょう。
git log master ^partial-feature
このコマンドは、master
ブランチに含まれているが partial-feature
ブランチには含まれていないコミットを表示します。master
ブランチの最初のコミット、「Add new feature」コミット(現在は master
ブランチにあります)、および「Add part 1」コミット(チェリーピックしたもの)が表示されるはずです。「Add part 2」コミットは表示されません。このコミットは partial-feature
ブランチにのみ存在するからです。
これは、git branch --merged
と git log main ^branch
が、一部のコミットのみが統合されている場合でも、ブランチのマージ状況を理解するのにどのように役立つかを示しています。