Git 既存リポジトリをGit Flowブランチモデルに変更&ブランチ名前変更

無料ソースコード管理 (SCM: software configuration management) ソフト Git で用いられるブランチモデルのひとつである git flow を、既存のリポジトリに適用するとして2つの永続的に用いるブランチ作成します。

既存のリポジトリは git flow と異なるブランチ構造を持つため、ブランチの名前変更、不要なブランチの削除を行った後、 メッセージだけのコミットを持つブランチを作成します。

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

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 オプションは、移動・名前変更を行います。名前は変わりますが、ブランチの情報は保持されます。

-m–move

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
Override the up-to-date check.
最新のチェックをオーバーライドします。

Git – git-rm Documentation と Google 翻訳

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 のブランチモデルに変更7

コミット履歴を持たないブランチの作成については、失敗例なども含めた記事もあるので参照してください。

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'
コミット済みの既存リポジトリで Git Flow のブランチモデルに変更8

まとめ

今回は、無料ソースコード管理 (SCM: software configuration management) ソフト Git で用いられるブランチモデルのひとつである git flow を、既存のリポジトリに適用するとして2つの永続的に用いるブランチ作成しました。

既存のリポジトリは git flow と異なるブランチ構造を持つため、ブランチの名前変更、不要なブランチの削除を行った後、 メッセージだけのコミットを持つブランチを作成しました。

参照サイト 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をコピーしました