無料のソースコード管理 (SCM: software configuration management) ソフト Git で用いられるブランチモデルのひとつである git flow を、既存のリポジトリに適用する例として2つの永続的に用いるブランチを作成します。
既存のリポジトリは git flow と異なるブランチ構造を持つため、ブランチの名前変更、不要なブランチの削除を行った後、 メッセージだけのコミットを持つブランチを作成します。

※Git-2.49.0 (64 bit) を使用します。
前回の記事
前回は、既存のコミットを持たない、メッセージだけのコミットだけを持つブランチの作成手順を紹介しました。
Git Flow ブランチモデルで永続的に存在するブランチ
git flow ブランチモデルでは、以下の2つの永続的に用いるブランチが存在します。
- develop:開発用のブランチ
- master: 本番環境用のブランチで、開発には用いず、納品やリリースしたものを置きます。タグをつけてバージョンを管理することもあります。
詳しくは以下の記事などを参照してください。
既存のサンプルリポジトリの状態
git flow ブランチモデルに作り変える前の、サンプルリポジトリには、以下の2つのブランチが存在します。
- master : 開発用
git flow ブランチモデルでは、master ブランチは、開発用ではなく、本番環境用のブランチなので役割が異なっています。
名前を変える必要があります。 - publish:本番環境用(GitHub公開用)
git flow ブランチモデルでは master の役割のブランチです。
本番環境用にリリースしたコミットだけを置くため、新たに空のブランチとして作成します。
以下は git branch コマンドで表示した、そのサンプルリポジトリの持つブランチです。
アスタリスク(*) がついている master ブランチが、現在のコミットを持つブランチです。
G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git branch
* master
publish
If
--list
is given, or if there are no non-option arguments, existing branches are listed; the current branch will be highlighted in green and marked with an asterisk. Any branches checked out in linked worktrees will be highlighted in cyan and marked with a plus sign. Option-r
causes the remote-tracking branches to be listed, and option-a
shows both local and remote branches.–list が指定されている場合、またはオプション以外の引数がない場合は、既存のブランチがリストされます。現在のブランチは緑色で強調表示され、アスタリスクが付けられます。リンクされたワークツリーでチェックアウトされたブランチはシアン色で強調表示され、プラス記号が付けられます。オプション -r を指定すると、リモート追跡ブランチがリストされ、オプション -a を指定すると、ローカル ブランチとリモート ブランチの両方が表示されます。
Git – git-branch ドキュメント と Google 翻訳
ブランチの名前変更(リネーム)
前回の記事のとおり、 git flow ブランチモデルでは、 master は本番環境用のブランチです。開発は行いません。
開発は develop ブランチで行います。
サンプルのリポジトリでは、 master ブランチで開発をしているため、そのコミット履歴を失わないように master ブランチを develop ブランチに以下の git コマンドで、リネームします。
git branch -m 変更元のブランチ名 変更後のブランチ名
上記の -m オプションは、移動・名前変更を行います。名前は変わりますが、ブランチの情報は保持されます。
Move/rename a branch, together with its config and reflog.
ブランチをその構成および reflog とともに移動/名前変更します。
Git – git-branch ドキュメント と Google 翻訳
例では master ブランチを develop ブランチにリネームしました。
git branch で結果を確認すると master ブランチが develop ブランチに変わっています。
G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git branch -m master develop
G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git branch
* develop
publish
git flow ブランチモデルにない publish ブランチの削除
削除するブランチだけが持つコミットがある場合、そのコミットの情報が失われることを防ぐため、前述の -d オプションではメッセージが表示され、ブランチの削除はできませんでした。
https://compota-soft.work/wp1/wp-admin/post.php?post=54369&action=edit
-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 ブランチを削除しました。
コミット履歴をもたないブランチの作成
git flow ブランチモデルの master ブランチは、本番環境用のブランチで、安定版のコミットだけを持ちます。
それらのコミットには、バージョンなどのタグが付けられる場合もあります。
再び、git checkout コマンドの –orphan オプションを使って、どのコミットも持たない master ブランチを作成して、そのブランチに切り替えます。
G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git checkout --orphan master
Switched to a new branch 'master'
ここで、git rm コマンドで、作業ディレクトリの git に管理されているファイルを削除して、インデックスを消去します。
-r オプションで再帰的に下位のフォルダの内容も削除します。
-f オプションは強制的にすることで、確認のやりとりを省略します。
git rm -rf .
Remove files from the working tree and from the index
作業ツリーとインデックスからファイルを削除する-r
Allow recursive removal when a leading directory name is given.
先頭のディレクトリ名が指定されている場合、再帰的な削除を許可します。-f–force
Git – git-rm Documentation と Google 翻訳
Override the up-to-date check.
最新のチェックをオーバーライドします。
Git 管理されているファイルが作業ディレクトリから削除されました。
ステージングエリアでコミット対象になっていたファイル群の情報が書かれている index も消去されました。
G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git rm -rf .
rm '.gitattributes'
rm '.gitignore'
rm 'LICENSE'
rm 'README.md'
rm 'study/fit_font_size/study_fit_font_size.gd'
rm 'study/fit_font_size/study_fit_font_size.tscn'
rm 'study/fit_font_size/study_fit_font_size_backup.tscn'
rm 'study/fit_font_size/study_popup_sc_fit_font_size_dialog.gd'
rm 'study/fit_font_size/study_popup_sc_fit_font_size_dialog.tscn'
rm 'study/study_input_key.gd'
rm 'study/study_input_key.tscn'
rm 'study/study_input_key.tscn~RF6d1dd68.TMP'
rm 'study/study_pseudo_varargs.gd'
rm 'study/study_pseudo_varargs.tscn'
rm 'study/study_setter_getter_signal.gd'
rm 'study/study_setter_getter_signal.tscn'
rm 'utility/sc_min_max_constraint_handler.gd'
rm 'utility/sc_min_max_constraint_handler_inspector.gd'
rm 'utility/sc_rich_text_url_handler.gd'
rm 'utility/sc_util.gd'
rm 'utility/test/test_sc_util.gd'
rm 'utility_editor/sc_util_editor.gd'
作業ディレクトリと index に何もない状態に作業ツリーを変更してから、git checkout –orphan で作成して切り替えた master ブランチにメッセージのみのコミットを与えます。
G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git commit --allow-empty -m "Initial empty master"
[master (root-commit) b240982] Initial empty master
「リビジョンログ(ログメッセージ)」ダイアログには、ファイルの変更のない、メッセージだけのコミットをもつ master ブランチが確認できました。

コミット履歴を持たないブランチの作成については、失敗例なども含めた記事もあるので参照してください。
Git Flow 2つの永続的なブランチの状態の確認
git branch コマンドを使うと、master からリネームされた develop ブランチと、メッセージのみのコミットだけを持つように作成した master ブランチが確認できました。
※ master ブランチを最後に作成してそこにコミットしたため、 master ブランチが現在のブランチとしてアスタリスクがついています。
G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git branch
develop
* master
master ブランチのコミット履歴を git log –oneline コマンドで確認すると、メッセージのみのコミットだけを持っていることが確認できます。
G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git log --oneline
b240982 (HEAD -> master) Initial empty master
git log コマンドにブランチの名前(例では develop )を指定することで、現在のブランチ以外のログも確認できます。
develop ブランチには、リネーム前にコミットしていたファイルの追加や変更の履歴が確認できました。
G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git log develop --oneline
7d24309 (develop) 以下の3つのフォルダを管理に追加します。 ・勉強用のリソースを持つ sutdy フォルダ ・汎用的な関数やクラ
スを定義した utility フォルダ ・汎用的なエディタ上で使う関数やクラスを定義した utility_editor フォルダ
cf35456 addons の外部アセットをGit管理外に指定し、my フォルダの自作アセットのファイルは管理に指定。
724b8f7 注意事項を追加
a85d609 Git 管理を開始した際に作成したファイル群をコミットします。
master→develop ブランチへの切り替えと Git 管理ファイルの復元
git switch コマンドで、管理ファイルがない master ブランチから、管理ファイルがある develop ブランチに切り替えると、master ブランチに最初のコミットをする前に削除した Git 管理しているファイルも、develop ブランチのコミットに保存されているファイルの状態に戻りました。
G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git switch develop
Switched to branch 'develop'

まとめ
今回は、無料のソースコード管理 (SCM: software configuration management) ソフト Git で用いられるブランチモデルのひとつである git flow を、既存のリポジトリに適用する例として2つの永続的に用いるブランチを作成しました。
既存のリポジトリは git flow と異なるブランチ構造を持つため、ブランチの名前変更、不要なブランチの削除を行った後、 メッセージだけのコミットを持つブランチを作成しました。
参照サイト 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
コメント