Git ブランチの削除&他のブランチへマージ済みかの確認

無料ソースコード管理 (SCM: software configuration management) ソフト Git で、作成したブランチを削除する手順を紹介します。
削除されるブランチだけが持っているコミットがある場合に表示される警告文の意味や、削除するブランチのコミットが、他のブランチにマージ済みかの確認の手順も紹介します。

git-scm 公式サイトの一部 20250408

Git-2.49.0 (64 bit) を使用します。

前回の記事(git flow ブランチモデルについて)

git flow ブランチモデルの各ブランチの役割の簡単な説明と、 git flow init コマンドによるリポジトリの作成結果については以下の記事を参照してください。

-d オプションでマージ済みか確認してからブランチを削除

例として publish という名前のブランチを削除します。
このブランチは、作成した後に、このブランチだけに対してコミットをしています。

git branch コマンドのオプションには、ブランチを削除する -d オプションがあります。

git branch -d 削除するブランチ名

-d オプションを付けると、指定したブランチを削除します。

-d–delete

Delete a branch. The branch must be fully merged in its upstream branch, or in HEAD if no upstream was set with --track or --set-upstream-to.

ブランチを削除します。ブランチは、アップストリーム ブランチ、または –track または –set-upstream-to でアップストリームが設定されていない場合は HEAD で完全にマージする必要があります。

Git – git-branch ドキュメント と Google 翻訳

しかし、これを publish ブランチに実行すると以下のようなメッセージが表示され、ブランチの削除に失敗しました。

G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git branch -d publish
error: the branch 'publish' is not fully merged
hint: If you are sure you want to delete it, run 'git branch -D publish'
hint: Disable this message with "git config set advice.forceDeleteBranch false"

error: the branch ‘publish’ is not fully merged
hint: If you are sure you want to delete it, run ‘git branch -D publish’
hint: Disable this message with “git config set advice.forceDeleteBranch false”

エラー: ブランチ「publish」は完全にはマージされていません
ヒント: 削除してもよい場合は、「git Branch -D public」を実行してください。
ヒント: このメッセージを「git config set advice.forceDeleteBranch false」で無効にします。

git branch -d publish で表示されたエラーメッセージと Google 翻訳

これは、削除するブランチ (publish) の最新のコミットが、他のブランチに存在しない(マージされていない)ために表示される警告です。
publish ブランチを消す前に、他のブランチに publish の最新コミットを保存しなくても良いか確認しています。

ブランチが他のブランチにマージ済みかの確認

publish ブランチが、もう一方の develop ブランチにマージされているかどうかを確認してみましょう。

git branch --merged

git branch コマンドの –merged オプションでは、現在のブランチにマージ済みのブランチの一覧を確認できます。

–merged [<commit>]

Only list branches whose tips are reachable from the specified commit (HEAD if not specified). Implies --list.

指定されたコミット (指定されていない場合は HEAD) からヒントが到達可能なブランチのみをリストします。 –list を意味します。

Git – git-branch ドキュメント と Google 翻訳

結果として、現在のブランチ(develop) には、 publish ブランチはマージされていませんでした。
そして、現状は、 develop と publish ブランチしかないので、 publish ブランチをマージしているブランチはどこにもないことが確認できました。

G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git branch --merged
* develop

また、以下の git log コマンドでは、 A ブランチに含まれていない B ブランチのコミットを確認できます。

git log B --not A --oneline

git log master --not --remotes=*/master

Shows all commits that are in local master but not in any remote repository master branches.

ローカルマスターにはあるが、リモートリポジトリマスターブランチには存在しないすべてのコミットを表示します。

Git – git-log Documentation と Google 翻訳

結果として、削除する publish ブランチの bf094aa のコミットが、 もう一方の develop ブランチに存在しない(マージされていない)ことがわかりました。

G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git log publish --not develop --oneline
bf094aa (publish) GitHub に公開するファイルだけを追加

以上のことから、削除するブランチコミット失われないように、他のブランチにマージしてから削除したい場合は -d オプションで、他のブランチに削除するブランチのコミットがマージしてあるか確認してから削除するとよいでしょう。

-D オプションで強制的にブランチを削除する

削除するブランチだけが持つコミットがある場合、そのコミットの情報が失われることを防ぐため、前述の -d オプションではメッセージが表示され、ブランチの削除はできませんでした。

-d ではなく -D オプションを使うと、そのような状態でも強制的にブランチを削除できます。
※他のブランチにマージしていない、削除するブランチのコミット情報は失われます。

git branch -D 削除するブランチ名

In combination with -d (or --delete), allow deleting the branch irrespective of its merged status, or whether it even points to a valid commit.

-d (または –delete) と組み合わせて、マージされたステータスや有効なコミットを指しているかどうかに関係なく、ブランチを削除できるようにします。

Git – git-branch ドキュメント と Google 翻訳

例では、publish という名前のブランチを強制的に削除しました。

G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git branch -D publish
Deleted branch publish (was bf094aa).

今回は、マージしないで削除するので、先ほどの git branch -d publish の実行結果の hint にあったように -D オプションで強制的に publish ブランチを削除しました。

まとめ

今回は、無料ソースコード管理 (SCM: software configuration management) ソフト Git で、作成したブランチを削除する手順を紹介しました。
削除されるブランチだけが持っているコミットがある場合に表示される警告文の意味や、削除するブランチのコミットが、他のブランチにマージ済みかの確認の手順も紹介しました。

参照サイト Thank You!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました