1. ホーム
  2. git

[解決済み] Git "error: ブランチ 'x' は完全にマージされていません。

2022-03-15 10:45:35

質問

以下は、masterブランチから使用したコマンドです。

git branch experiment
git checkout experiment

そして、自分のファイルにいくつか変更を加えてコミットし、新しいブランチを GitHub にプッシュしました。

git commit . -m 'changed files'
git push -u origin experiment

その後、実験用ブランチを master ブランチにマージすることにしました。

git checkout master
git merge experiment

最後に、変更をGitHubにプッシュしました。

git push -u origin master

を使って実験用ブランチを削除するまでは、すべてうまくいっていました。

git branch -d experiment

エラーメッセージが表示されました。

エラーが発生しました。ブランチ 'experiment' は完全にマージされていません。
本当に削除してよいのなら、'git branch -D experiment' を実行してください。

私はgitに少し慣れていないので、2つのブランチをどこまでマージできるのかわかりません。何が足りないのでしょうか?

どのように解決するのですか?

<上 注意事項 コメントを受けて、文言を変更しました。ありがとうございます。
これはエラーではなく、警告です。削除しようとしているブランチには、上流ブランチや HEAD (現在チェックアウトされているリビジョン) のいずれからも到達できないコミットが含まれているということです。 つまり、コミットを失う可能性がある場合です¹。

実際には、おそらくコミットを修正、リベース、またはフィルタリングして、それらがないことを意味します。 と思われる は同じです。

したがって、あなたは 警告を回避する を含むブランチをチェックアウトすることです。 非参照 その別のブランチを削除することで、です²。

実際に重要なコミットを見逃していないことを確認したいと思います。

git log --graph --left-right --cherry-pick --oneline master...experiment

これで、ブランチ間で共有されていないもののリストが得られます。気になるところですが、このとき --cherry-pick という警告が表示されることがあります。

<ブロッククオート

--cherry-pick

コミットのセットが対称的な差で制限されている場合、"other side"の他のコミットと同じ変更を導入するコミットは省略されます。たとえば、A と B という二つのブランチがあったとして、片方だけのコミットをリストアップするには --left-right を指定します。しかし、これではもう一方のブランチからチェリーピックしたコミットが表示されてしまいます (たとえば "3rd on b" は A ブランチからチェリーピックしたものかもしれません)。このオプションでは、そのようなコミットのペアは出力から除外されます。


デフォルトでは、しばらくするとガベージコレクトされるだけです。また git-branch のリビジョンツリーをチェックしません。 すべてのブランチ . この警告は、明らかな間違いを避けるためにあるのです。

² (私の好みとしては、代わりに強制的に削除することですが、より安心感を得たいかもしれません)。