Git(ギット)は、オープンソースの分散型バージョン管理システムです。
ソフトウェア開発の現場で広く使われており、コードやファイルの変更履歴を管理し、複数人での共同開発を効率化します。
本ブログは、Udemyで人気の「ピーコックアンダーソン氏」が作成した、「VisualStudioでGit&GitHubを使ってソースコードを管理する方法【C#】」を参考にし、自分なりにGitを操作した手順と少しの考察を紹介します。
Gitによるバージョン管理の基本手順
- ローカルリポジトリの作成
各自のパソコン内に、ソースとソースの変更履歴を保存する領域(ローカルリポジトリ)を作成する - 変更履歴のコミット
変更履歴をローカルリポジトリ内のに記録(コミット)する - ブランチの作成(必要な場合)
新機能を追加する場合等、変更履歴の流れを分岐させ、上手くいけばブランチを統合(マージ)し、うまくいかない場合はブランチを切り捨てる - 各自のリポジトリを同期する
- GitHub上に各自がアクセスできる「リモートリポジトリ」を作成
- 各自が「リモートリポジトリ」へ変更をプッシュし、且つ「リモートリポジトリ」からプルしてローカルリポジトリを同期させる
- リベースやリバートで履歴を整理する
- リベース
- 変更履歴を直線的に保つためコミット履歴を再整理します。
- リバート
- 新しいコミットを追加することで履歴を「逆転」させ、特定の変更を無効にします。リセットとは異なり「逆転」前の履歴も保持されます。
- 新しいコミットを追加することで履歴を「逆転」させ、特定の変更を無効にします。リセットとは異なり「逆転」前の履歴も保持されます。
- リベース

Gitのインストールと初期設定
Gitのインストール
- Visual Studio を「コードなしで続行」

- メニューの「ツール」→「ツールと機能を取得」
- 「個別コンポーネント」タブで Git を検索し「Git for Windows」にチェック
- 「変更ボタン」をクリックしてインストール

- Gitのインストール確認
コマンドプロンプトで、「git –version」と入力しバージョン番号が表示されればOK

ローカルリポジトリ Git使用手順
- 使用環境
- Windows 10 Pro 2009
- Visual Studio Community 2022 17.14.0
- 簡単なC# Windows Formアプリ「Git_Test_A」(.NET Windows)を作成して手順を説明します
- サンプルプログラム
入力欄A、Bに数値を入力し「加算」又は「減算」ボタンをクリックしたら結果を「回答欄」に表示
- サンプルプログラム

ローカル Gitリポジトリの作成
- メニュー「Git」→「Gitリポジトリの作成」

- 「ローカルのみ」を選択し「作成」ボタンをクリック

- 画面左下の「NuGetパッケージをクリック」して「正常に作成されました」のメッセージが表示されれは作成は成功

- Gitに管理されている項目には、キーマークが付く

変更内容の確認
- ソースを変更したコンテンツには✔マークが付いて変更の差分を確認できる
- 掛け算のコードを追加

- 差分の表示
変更されたコンテンツを右クリック⇀「Git」→「未変更のものと比較」

- 左側が変更前、右側が変更後

コミット前の変更内容取り消し
- サンプルプログラムに「Aの二乗」を追加したが、不要なので変更を取り消す場合
- 取り消し前

- ①「Form1.cs」を右クリック ⇀ ②「Git」→「変更を元の戻す」

- 取り消し後
変更コンテンツの✔マークも消えている

変更内容の確定 コミット
- メニュー①「表示」→②「Git変更」
- ③に変更されたコンテンツが表示されるので確認
- ④に変更内容を入力
- ⑤「全てをコミット」ボタンでコミット

コミットの確認
- メニュー①「表示」→②「Gitリポジトリ」をクリック
③のコミットの履歴が表示される。プリジェクトを作成してから「掛け算の追加」と「割り算の追加」がコミットされているのが確認できる。

コミットの内容確認
コミットの履歴で、「割り算の追加」の青い〇をクリックすると、変更内容が確認できる。

コミット後の取り消し
サンプルプログラムに「Aの二乗」と「Bの二乗」をコミットした後、「Aの二乗」までに戻りたい場合
- メニュー「表示」→「Gitリポジトリ」で現在のコミット状態を表示

「Bの二乗」のコードを残したままコミット取り消す
- 「Aの二乗」を右クリック⇀「リセット」→「変更を保持」

- 「Bの二乗」のコミットは消えたがソース変更の✔は付いており、「Forms.cs」を確認すると「Bの二乗」のコードは残っている。


「Bの二乗」のコードも削除してコミット取り消し
- 再度「Bの二乗」をコミット
- 「Aの二乗」リポジトリを右クリック⇀「リセット」→「変更を削除」
「Bの二乗」のコミット・ソース変更の✔・「Bの二乗」のコードが全て削除された。

ブランチの利用
ブランチの目的
ブランチは「master(本流)」に影響を与えずに、枝分かれして作業する為に作成します。主な目的は、
- 機能追加や修正を独立して行う
- バグ修正やホットフィックス
- 同時に異なる機能や修正を開発する
- 長期的なプロジェクト管理
- 実験的な機能をテスト etc.
ブランチの作成
最初は「master」しかないので、「master」からの分岐になります。
- 作成手順
- ①「master」のどのコミットからブランチするのか指定
- ②メニュー「Git」→「新しいブランチ」→「新しいブランチの作成」→ ダイアログ表示
- ③「ブランチ名」を入力
- ④「ブランチのチェックアウト」のチェックを確認
- 「ブランチのチェックアウト」のチェックが入っていないとブランチ作成後、新しいブランチに分岐できない
- ⑤「作成」をクリック

コミット「割り算の追加」からブランチ「Git_Test_A_2」が作成されました。現在どのブランチを操作しているかは、画面右下からも確認できます。

ブランチのコード変更とmasterの状態
ブランチ「Git_Test_A_2」のコードを変更し、「master」に影響がない事を確認します。
- 各計算ボタンをクリックした時に「ブランチ名」を表示する変更を加え、コミット
■ブランチ「Git_Test_A_2」のコード

- 「master」にはブランチ「Git_Test_A_2」のコード内容が反映されていない。

ブランチの統合
ブランチの統合例として、以下の要件で統合してみます。
- ブランチ「Git_Test_A_2」の「割り算の追加」からブランチ「Git_Test_A_3」を作成
- ブランチ「Git_Test_A_3」の各演算に「ブランチ「Git_Test_A_3」実行」のメッセージボックスを追加
- ブランチ「Git_Test_A_2」にブランチ「Git_Test_A_3」を統合する
■ブランチ「Git_Test_A_3」

- 「ブランチ「Git_Test_A_3」加算実行」のメッセージボックスを追加

ブランチの統合手順
- ①統合先のブランチ「Git_Test_A_2」を表示
- ②統合するブランチ「Git_Test_A_3」をリポジトリ画面で右クリック
- ③「’Git_Test_A_3’を’Git_Test_A_2’にマージする」をクリック

ブランチ「Git_Test_A_3」でコミットした変更が、「Git_Test_A_2」に表示され、統合された。

ブランチ「Git_Test_A_2」ソースコード。「Git_Test_A_3」で追加したコードが統合されている。

フォームの統合
フォームの統合は可能ですが、マージの競合が発生し解決する事が難しい場合もあります。その理由としては、
- フォームの構造が異なる
- マージ時に
.Designer.cs
ファイルの自動生成コードが破損しているケースが多い
- マージ時に
- 手動編集が混在
- WinFormsのデザイナからではなく、手動でコードを変更した場合に競合が発生しやすい
- Visual Studioのキャッシュ問題
.Designer.cs
ファイルは自動生成コードのため、手動での解決が難しい
※私の場合、他のプログラムで「GitHub Copilot」の力を借りて何とか統合する事ができました。
ローカルブランチの削除
- ブランチ削除の前提
- 現在使用していないブランチであること(チェックアウトしていない)。
- マージが完了していること(削除後に復元が困難なため)。
- ローカルとリモートでは異なる操作が必要です
ブランチ「Git_Test_A_3」の削除
- 手順
- ブランチ管理ウィンドウを表示します。
- 削除したいブランチを右クリック
- [削除] を選択
- 確認ダイアログが表示されるので、「OK」をクリックします。


【参考文献】

次回、GitHubリモート編をお届けします。