マスターブランチから使用したコマンドは次のとおりです
git branch experiment
git checkout experiment
次に、ファイルにいくつか変更を加え、変更をコミットし、新しいブランチを GitHub にプッシュしました。
git commit . -m 'changed files'
git push -u origin experiment
その後、実験ブランチをマスター ブランチにマージすることにしました。
git checkout master
git merge experiment
最後に、変更を GitHub にプッシュしました。
git push -u origin master
実験ブランチを削除しようとするまではすべて順調でした。
git branch -d experiment
次のエラーメッセージが表示されました:
エラー: ブランチ 'experiment' は完全にマージされていません。
削除してもよろしい場合は、'git branch -D experiment' を実行してください。
私は Git にあまり詳しくないので、2 つのブランチをどれだけマージできるかわかりません。何が足りないのでしょうか?
ベストアンサー1
注:コメントに応じて文言が変更されました。@slekse さん、ありがとうございます。
これはエラーではなく、警告です。削除しようとしているブランチに、上流ブランチまたは HEAD (現在チェックアウトされているリビジョン) のいずれからも到達できないコミットが含まれていることを意味します。言い換えると、コミットが失われる可能性があるということです¹。
実際には、コミットを修正、リベース(スカッシュマージを含む)、またはフィルタリングした可能性があり、それらが同一ではないことを意味します。
したがって、他のブランチを削除して参照解除しようとしているコミットを含むブランチをチェックアウトすることで、警告を回避できます。²
実際に重要なコミットが欠落していないことを確認する必要があります。
git log --graph --left-right --cherry-pick --oneline master...experiment
これにより、ブランチ間で共有されていないもののリストが表示されます。興味がある場合は、違いがある可能性があり--cherry-pick
、この違いが警告の原因である可能性があります。
--cherry-pick
コミットのセットが対称差で制限されている場合、"反対側" の別のコミットと同じ変更を導入するコミットを省略します。たとえば、A と B の 2 つのブランチがある場合、それらのブランチの片側のみのすべてのコミットを一覧表示する通常の方法は、そのオプションの説明にある上記の例のように --left-right を使用することです。ただし、他のブランチからチェリーピックされたコミットが表示されます (たとえば、"3rd on b" はブランチ A からチェリーピックされた可能性があります)。このオプションを使用すると、そのようなコミットのペアは出力から除外されます。
¹ デフォルトでは、しばらくしてからガベージ コレクションされるだけです。また、このコマンドはすべてのブランチgit-branch
のリビジョン ツリーをチェックしません。この警告は明らかな間違いを避けるためにあります。
² (ここでは強制的に削除することを好みますが、追加の安心感を得たいと思うかもしれません)。