Git flow ブランチモデル方式で master にコミットする例 1/4

無料ソースコード管理 (SCM: software configuration management) ソフト Git で用いられるブランチモデルのひとつである git flow の方式で、本番環境用の master ブランチにコミットする例を紹介します。
開発用の develop ブランチから分岐させた release/xxx ブランチで、master ブランチで公開したいファイル以外を除外して、master ブランチにそれをコミットしてバージョンを表すタグ付けを行います。

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

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

前回の記事

Git で用いられるブランチモデルのひとつである git flow を、既存のリポジトリに適用する例として、develop ブランチへのリネームと、新たにメッセージだけのコミットを持つ master ブランチを作成しました。

現在の develop, master ブランチの確認

git flow ブランチモデルで永続的に存在する develop (開発用), master (本番環境用) ブランチを前回作成しました。
その状態を確認します。

git branch コマンドで現在のリポジトリに存在するブランチを確認します。
前回の記事でリネーム・作成した develop, master ブランチを確認できました。
* のついている master が現在のブランチです。

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

git log –oneline -all で、全てのブランチの情報を1行ずつ表示します。

master ブランチ (2行目、ハイライト部分) は、まだ本番環境用のコミットを1つもしていないメッセージだけのコミットだけを持った状態です。
また HEAD -> master とあるように、先ほどのアスタリスクと同様に、 master が現在のブランチであることも確認できます。

develop ブランチ(3行目以降、ハイライトの次の行から)には、ファイルを追加したり変更した際のコミット確認できます。

G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git log --oneline --all
b240982 (HEAD -> master) Initial empty master
7d24309 (develop) 以下の3つのフォルダを管理に追加します。 ・勉強用のリソースを持つ sutdy フォルダ ・汎用的な関数やクラ
スを定義した utility フォルダ ・汎用的なエディタ上で使う関数やクラスを定義した utility_editor フォルダ
cf35456 addons の外部アセットをGit管理外に指定し、my フォルダの自作アセットのファイルは管理に指定。
724b8f7 注意事項を追加
a85d609 Git 管理を開始した際に作成したファイル群をコミットします。

この状態から、 master に README.md だけのコミットをマージ( develop → release/xxx → master ブランチへコミットを合流)してタグ付けするまでの工程を行います。

develop ブランチの最新コミットを作業ディレクトリに展開

master ブランチにコミットする元となる develop ブランチの最新のコミットを、git checkout コマンドでローカルの作業ツリーに展開します。
リモートブランチがある場合は、さらに、git pull origin develop (origin はリモートブランチの名前) で、リモートの最新の状態にします。

G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git checkout develop
Switched to branch 'develop'

Git 管理しているファイルがない master ブランチでは、作業ディレクトリに存在しないファイルが、 develop ブランチをチェックアウトすることで develop ブランチだけにコミットしたファイル展開されました。

Git checkout による別ブランチのコミットの展開1
Git checkout による別ブランチのコミットの展開2

develop から分岐した release/xxx ブランチを作成

master ブランチで本番環境用(納品や公開など)のコミットを置くために、開発用の develop ブランチから本番環境用のコミットを作るための release/xxx ブランチを作成します。
※ xxx には任意のバージョン名などが入ります。 master ブランチで後でタグをつける場合、同じ名前でもよいと思います。

git checkout -b <作成するブランチ名> 

を使うことで、現在のコミットまでの履歴を共有して、それ以降は分岐した別のコミット履歴を持つ新しいブランチを作成して、新しく作成したそのブランチに現在のブランチを切り替えます。
git branch <作成するブランチ名> でも同様ですが、こちらは git switch による切り替えが行われません。

-b <new-branch>

Create a new branch named <new-branch>, start it at <start-point>, and check the resulting branch out; see git-branch[1] for details.

<new-branch> という名前の新しいブランチを作成し、 <start-point> から開始して、結果のブランチをチェックアウトします。詳細については、git-branch[1] を参照してください。

Git – git-checkout Documentation と Google 翻訳

git branch コマンドで、git checkout – b の前後の存在するブランチを確認すると、git checkout -b で作成されたブランチ (例では release/github-0.1) が増えて、そのブランチが選択されています。

また、 git log –oneline で、作成されて選択された release/github-0.1 のコミット履歴を確認すると、 develop ブランチのコミット履歴と同じであることが確認できました。
コミットの短縮したハッシュ値をみると 7d24309 など実体が同じコミットオブジェクトを共有していることがわかります。

git checkout -b で作成された release/github-0.1 は、作成時に選択されていた develop ブランチと同じコミット履歴を共有し、それ以降は develop ブランチと分岐して、異なるコミット履歴を記録していきます。

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

G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git checkout -b release/github-0.1
Switched to a new branch 'release/github-0.1'

G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git branch
  develop
  master
* release/github-0.1

G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git log --oneline
7d24309 (HEAD -> release/github-0.1, develop) 以下の3つのフォルダを管理に追加します。 ・勉強用のリソースを持つ sutdy フォルダ ・汎用的な関数やクラスを定義した utility フォルダ ・汎用的なエディタ上で使う関数やクラスを定義した utility_editor フォルダ
cf35456 addons の外部アセットをGit管理外に指定し、my フォルダの自作アセットのファイルは管理に指定。
724b8f7 注意事項を追加
a85d609 Git 管理を開始した際に作成したファイル群をコミットします。

リリースするファイル以外の削除

今回は、 master ブランチに本番環境用(納品、公開など)として持たせるファイルは、 develop ブランチのごく一部のものだけにします。

本番環境用のコミットを準備するために develop ブランチから分岐して作成した release/github-0.1 ブランチでは、 master ブランチのコミットに含めないファイル群を Git 管理から除外(削除)します。

Git 管理からの除外(削除)には git rm –cached コマンドを使います。

git rm --cached -r 除外するファイル名

–cached を指定すると、作業ディレクトリのファイルは消さずに、 Git 管理から除外できます。
-r を指定することで、再帰的に、指定したフォルダの最下層まで全てのファイルを対象にします。

--cached

Use this option to unstage and remove paths only from the index. Working tree files, whether modified or not, will be left alone.

このオプションは、インデックスからのみパスをステージング解除して削除する場合に使用します。作業ツリー ファイルは、変更されているかどうかに関係なく、そのまま残されます。

Git – git-rm Documentation

–cached を指定しないと、ファイル自体が消されるので、注意しましょう。
ファイルを消してしまった場合は、消す前のコミットのハッシュ値を指定してチェックアウトなどで復元しましょう。

G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git rm --cached -r study utility utility_editor
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'
Git rm と restore でファイルをGit管理から除外(削除)と取り消し1

削除を取り消したい場合

git resotore –staged . とすると、インデックスだけが現在の HEAD の指すコミットの内容に戻ります。
今回は、指定したファイル群を Git 管理から除外(削除)するため、インデックスを戻すだけで、その削除を取り消します。
–staged を指定しない場合は、 –worktree と同様にワーキングツリー(作業ディレクトリ)のファイルの変更を戻します。

削除するファイルを削除しない状態に戻す場合

git restore --staged .

--staged

Specify the restore location. If neither option is specified, by default the working tree is restored. Specifying --staged will only restore the index. Specifying both restores both.

復元場所を指定します。どちらのオプションも指定されていない場合、デフォルトで作業ツリーが復元されます。 –staged を指定すると、インデックスのみが復元されます。両方を指定すると両方が復元されます。

Git – git-restore Documentation と Google 翻訳

どのファイルを対象にするかをそのあとに指定する必要がありますが、例のように . をつけると全てのファイルを対象にします。

G:\Dev\Godot4GD\SakuraCrowd\SakuraCrowdGodotLib>git restore --staged .
Git rm と restore でファイルをGit管理から除外(削除)と取り消し2

TortoiseGit の差分表示の更新のラグと対処

TortoiseGit はエクスプローラを更新しても、 restore が反映されず、赤いアイコンが表示されていました。

エクスプローラで右クリックして表示されるメニュー「TortoiseGit」→「差分」で差分のダイアログを表示すると、差分は検出されず、それをきっかけにしてか、エクスプローラの赤いアイコンも差分なしを表す緑のアイコンに戻りました。

Git rm と restore でファイルをGit管理から除外(削除)と取り消し3
Git rm と restore でファイルをGit管理から除外(削除)と取り消し4

TortoiseGit による管理からの除外(削除)とその取り消し

TortoiseGit による管理からの除外(削除)とその取り消しについては、以下の記事を参照してください。

今回はここまで

次回に続きます。

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