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

※Git-2.49.0 (64 bit) を使用します。
前回の記事(git flow ブランチモデルについて)
git flow ブランチモデルの各ブランチの役割の簡単な説明と、 git flow init コマンドによるリポジトリの作成結果については以下の記事を参照してください。
-d オプションでマージ済みか確認してからブランチを削除
例として publish という名前のブランチを削除します。
このブランチは、作成した後に、このブランチだけに対してコミットをしています。
git branch コマンドのオプションには、ブランチを削除する -d オプションがあります。
git branch -d 削除するブランチ名
-d オプションを付けると、指定したブランチを削除します。
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 publish で表示されたエラーメッセージと Google 翻訳
ヒント: 削除してもよい場合は、「git Branch -D public」を実行してください。
ヒント: このメッセージを「git config set advice.forceDeleteBranch false」で無効にします。
これは、削除するブランチ (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!
- Git
- TortoiseGit – Windows Shell Interface to Git
- A successful Git branching model » nvie.com
- Git – git-branch ドキュメント
- Git – git-rm Documentation
- Git – git-checkout Documentation
- Git – git-switch Documentation
- Git – git-log Documentation
記事一覧 → Compota-Soft-Press
コメント