C#開発でGitを使いこなす方法|Visual Studio連携から基本コマンド・GitHub管理まで解説

はじめに

C#開発では、ソースコードを書くだけでなく、変更履歴を安全に管理することが重要です。小さな個人アプリでも、ASP.NET CoreのWebアプリでも、WPFやWindows Formsのデスクトップアプリでも、開発を進めていると「前の状態に戻したい」「どの修正で不具合が入ったのか確認したい」「別の機能を試しながら今のコードを壊したくない」といった場面が必ず出てきます。

そこで役立つのがGitです。Gitを使うと、C#プロジェクトの変更履歴を記録し、必要に応じて過去の状態を確認したり、別ブランチで安全に機能追加を進めたりできます。さらにGitHubと連携すれば、ローカルPCだけでなくクラウド上にもコードを保存でき、チームメンバーとの共有やレビューも行いやすくなります。

Visual StudioにはGit機能が統合されているため、C#開発者はコマンドラインだけに頼らず、画面操作でGit管理を始められます。本記事では、C#開発でGitを使うための基礎知識から、Visual Studio連携、基本コマンド、GitHub管理、ブランチ運用、トラブル対処までを順番に解説します。

1. C#開発でGitを使う前に知っておきたい基礎知識

1-1. Gitとは?C#開発でソースコード管理が必要な理由

Gitは、ソースコードの変更履歴を記録するための分散型バージョン管理システムです。公式サイトでも、Gitは小規模から大規模なプロジェクトまで高速かつ効率的に扱える、無料でオープンソースの分散型バージョン管理システムと説明されています。

C#開発では、.csファイル、.csprojファイル、.slnファイル、設定ファイル、テストコードなど、多くのファイルを扱います。Gitを使わずに開発していると、変更前の状態を残すためにプロジェクトフォルダをコピーしたり、ファイル名に「backup」「old」「修正前」などを付けたりしがちです。しかし、この方法ではどのファイルが最新なのか分かりにくくなり、ミスの原因になります。

Gitを使えば、変更内容を「コミット」という単位で保存できます。たとえば「ログイン画面を追加」「Entity Framework Coreの設定を変更」「バリデーション処理を修正」といった作業単位で履歴を残せます。そのため、不具合が起きたときに原因を追いやすくなり、必要に応じて過去の状態へ戻すこともできます。

1-2. Git・GitHub・Visual Studioの役割の違い

C#開発でGitを使うときは、Git、GitHub、Visual Studioの役割を混同しないことが大切です。

Gitは、変更履歴を管理するための仕組みそのものです。ローカルPC上でリポジトリを作成し、ファイルの変更を記録します。インターネット接続がなくても、コミットや履歴確認などの基本操作は行えます。

GitHubは、Gitリポジトリをインターネット上で管理・共有するためのサービスです。ローカルにあるC#プロジェクトをGitHubにプッシュすれば、バックアップとして使えます。また、チームメンバーとコードを共有したり、Pull Requestを使ってレビューしたりできます。GitHub Docsでは、リポジトリをローカルにクローンし、変更をコミットしてPull Requestを作成できる流れが案内されています。

Visual Studioは、C#開発に使う統合開発環境です。Visual StudioにはGit機能が組み込まれており、Git変更ウィンドウやブランチ管理、GitHubへのプッシュ、リポジトリのクローンなどを画面上から操作できます。MicrosoftのVisual Studioドキュメントでも、GitHubアカウントを使ってVisual Studio内からコード管理や共同開発を行えることが説明されています。

つまり、Gitは履歴管理の仕組み、GitHubはリモートで共有する場所、Visual StudioはC#開発とGit操作をまとめて行える開発環境です。

1-3. C#プロジェクトでGitを使うと解決できる悩み

C#プロジェクトでGitを導入すると、次のような悩みを解決しやすくなります。

まず、コードを変更したあとに「前の状態に戻したい」と思ったとき、Gitの履歴から変更内容を確認できます。単純なファイルコピー管理とは違い、いつ、誰が、どのような目的で変更したのかをコミット単位で追跡できます。

次に、「新機能を試したいが、今動いているコードは壊したくない」という場面では、ブランチを使えます。ブランチを分ければ、mainブランチの安定版を残したまま、新しい機能や修正を別の作業領域で進められます。

また、チーム開発では「同じファイルを複数人が編集してしまった」「誰の修正が最新なのか分からない」といった問題が発生します。Gitを使うと、変更履歴を共有しながら作業できるため、衝突が起きた場合も差分を見ながら解決できます。

さらに、GitHubにプッシュしておけば、PCの故障や誤削除に備えたバックアップにもなります。C#の学習用プロジェクトから業務システムまで、Gitは開発の安全性を高める基本ツールです。

1-4. 個人開発とチーム開発で変わるGitの使い方

個人開発では、Gitは主にバックアップ、履歴管理、作業の切り戻しに使います。たとえば、学習用のC#コンソールアプリや個人のWebアプリを作る場合、こまめにコミットしておくだけでも大きな効果があります。失敗を恐れずにコードを変更できるようになり、過去の実装を参考にしやすくなります。

一方、チーム開発では、Gitの使い方にルールが必要です。mainブランチに直接コミットせず、機能ごとにブランチを作成し、Pull Requestでレビューしてからマージする運用が一般的です。誰がどの作業をしているのか、どの変更がレビュー済みなのかを明確にすることで、品質を保ちやすくなります。

個人開発では「自分が分かればよい」運用でも成り立ちますが、チーム開発ではコミットメッセージ、ブランチ名、Pull Requestの説明、マージ方法などをそろえることが重要です。C#開発でGitを使いこなすには、プロジェクトの規模に合わせて運用方法を変える意識が必要です。

2. C#開発でGitを使うための環境構築

2-1. Visual StudioでGitを使うために必要な準備

Visual StudioでC#プロジェクトをGit管理するには、まずVisual Studio本体がインストールされている必要があります。C#開発では、通常「.NETデスクトップ開発」「ASP.NETとWeb開発」などのワークロードを選択してインストールします。

Visual StudioにはGit連携機能が含まれているため、多くの場合は追加の拡張機能を入れなくても基本操作が可能です。Gitリポジトリの作成、変更内容の確認、コミット、ブランチ作成、GitHubへのプッシュ、クローンなどをIDE上から実行できます。Microsoftのドキュメントでは、Visual StudioからGitHubリポジトリをクローンしてサインインする手順も案内されています。

ただし、コマンドラインでもGitを使いたい場合や、Visual Studio以外のエディタも併用する場合は、Git for Windowsをインストールしておくと便利です。Visual Studioの画面操作とGitコマンドの両方を使えるようにしておくと、トラブル対応もしやすくなります。

2-2. Git for Windowsのインストールと初期設定

WindowsでC#開発をしている場合は、Git for Windowsをインストールしておくのがおすすめです。Git for Windowsを入れると、コマンドプロンプト、PowerShell、Git BashなどからGitコマンドを使えるようになります。

インストール時には、基本的に標準設定のまま進めても問題ありません。ただし、エディタ設定や改行コードの扱いなどは開発環境に影響することがあります。C#プロジェクトではWindows環境で作業することが多いため、チームで改行コードのルールを決めておくと安心です。

インストール後は、ターミナルで次のコマンドを実行してGitが使えるか確認します。

Bash
git --version

バージョン番号が表示されれば、Gitが正しくインストールされています。

2-3. ユーザー名・メールアドレスを設定する方法

Gitでは、コミットにユーザー名とメールアドレスが記録されます。初めてGitを使う場合は、次のように設定しておきます。

Bash
git config --global user.name "Your Name"
git config --global user.email "your@example.com"

設定内容は次のコマンドで確認できます。

Bash
git config --global --list

GitHubを使う場合は、GitHubアカウントに登録しているメールアドレスと合わせると、コミット履歴がGitHub上で自分のアカウントに紐づきやすくなります。会社のプロジェクトでは、会社用のメールアドレスを使うルールがある場合もあるため、事前に確認しておきましょう。

2-4. Visual StudioでGit機能が使えないときの確認ポイント

Visual StudioでGitメニューやGit変更ウィンドウが表示されない場合は、いくつかの確認ポイントがあります。

まず、開いているフォルダやソリューションがGitリポジトリとして初期化されているか確認します。.gitフォルダが存在しない場合、そのプロジェクトはまだGit管理されていません。Visual Studioの「Gitリポジトリの作成」や、コマンドラインのgit initでリポジトリを作成します。

次に、Visual Studioのバージョンが古すぎないか確認します。GitHub連携やGitウィンドウの機能は、Visual Studioの更新によって改善されることがあります。可能であれば最新版に更新しておきましょう。

また、GitHubに接続できない場合は、Visual Studioにサインインしているアカウント、GitHub認証、ネットワーク環境、プロキシ設定なども確認します。会社のネットワークでは認証や通信制限が原因で接続できないこともあります。

3. Visual StudioでC#プロジェクトをGit管理する手順

3-1. 新規C#プロジェクト作成時にGitリポジトリを作成する

新しくC#プロジェクトを作成する場合、Visual Studioのプロジェクト作成画面でGitリポジトリを同時に作成できます。たとえば、コンソールアプリ、ASP.NET Coreアプリ、WPFアプリなどを作成するときに、Git管理を有効にしておくと、最初の状態から履歴管理を始められます。

新規プロジェクト作成直後は、まだアプリの基本構成だけがある状態です。このタイミングで最初のコミットを作成しておくと、あとから変更を比較しやすくなります。コミットメッセージは「初期プロジェクト作成」や「Initial commit」など、プロジェクト開始時点だと分かる内容にするとよいでしょう。

最初からGit管理しておくことで、開発途中で慌ててリポジトリを作成する必要がなくなります。C#開発では、プロジェクト作成と同時にGit管理を始める習慣をつけるのがおすすめです。

3-2. 既存のC#プロジェクトをGit管理に追加する

すでに作成済みのC#プロジェクトをGit管理に追加することもできます。Visual Studioでソリューションを開き、「Gitリポジトリの作成」や「ソース管理に追加」といった操作を行うと、プロジェクトフォルダにGitリポジトリを作成できます。

コマンドラインで行う場合は、ソリューションファイルがあるフォルダに移動して次のコマンドを実行します。

Bash
git init
git status

git initでリポジトリを作成し、git statusでGitが認識している変更ファイルを確認します。既存プロジェクトをGit管理に追加する場合は、最初に.gitignoreを作成し、binobj.vsなどの不要ファイルを除外してからコミットすることが重要です。

3-3. Visual StudioのGit変更ウィンドウの見方

Visual StudioのGit変更ウィンドウでは、現在の変更状況を確認できます。C#ファイルを編集したり、クラスを追加したり、プロジェクト設定を変更したりすると、変更ファイルとして一覧に表示されます。

主に確認するポイントは、変更されたファイル、追加されたファイル、削除されたファイル、ステージング済みのファイルです。ファイルをクリックすると差分を確認できるため、コミット前に意図しない変更が入っていないかチェックできます。

Visual StudioのGit変更ウィンドウは、コマンドラインでいうgit statusgit diffに近い役割を持ちます。Git初心者でも視覚的に変更内容を確認できるため、C#開発ではまずこの画面に慣れるとよいでしょう。

3-4. 変更内容を確認してステージングする方法

Gitでは、コミットする前に変更ファイルをステージングします。ステージングとは、「次のコミットに含める変更を選ぶ」操作です。

Visual Studioでは、Git変更ウィンドウからファイル単位でステージングできます。すべての変更をまとめてステージングすることもできますが、コミットの粒度を意識するなら、関連する変更だけを選ぶのがおすすめです。

たとえば、ログイン機能の修正と画面デザインの変更を同時に行った場合、それらを1つのコミットにまとめると履歴が分かりにくくなります。ログイン処理の修正だけをステージングしてコミットし、その後にデザイン変更を別コミットにすると、あとから履歴を追いやすくなります。

コマンドラインでは、次のようにステージングします。

Bash
git add Program.cs

すべての変更をステージングする場合は次のコマンドを使います。

Bash
git add .

3-5. コミットメッセージを書いて変更履歴を保存する

ステージングしたら、コミットメッセージを書いて変更履歴を保存します。Visual Studioでは、Git変更ウィンドウのメッセージ欄に内容を入力してコミットできます。

コミットメッセージは、あとから見たときに変更内容が分かるように書くことが大切です。「修正」「更新」「いろいろ変更」だけでは、何を変更したのか分かりません。次のように具体的に書くと、履歴として役立ちます。

ログイン失敗時のエラーメッセージを修正
商品一覧画面にページング処理を追加
appsettingsの接続文字列読み込み処理を変更

コマンドラインでは次のようにコミットします。

Bash
git commit -m "ログイン失敗時のエラーメッセージを修正"

C# git運用では、コミットは単なる保存ではなく、開発の記録です。将来の自分やチームメンバーが読んで理解できるメッセージを残しましょう。

4. C#開発でよく使うGit基本コマンド

4-1. git init:リポジトリを作成する

git initは、現在のフォルダをGitリポジトリとして初期化するコマンドです。Git公式ドキュメントでも、git initは空のGitリポジトリを作成し、.gitディレクトリを生成するコマンドと説明されています。

C#プロジェクトで使う場合は、.slnファイルがあるフォルダで実行するのが一般的です。

Bash
git init

このコマンドを実行すると、プロジェクトフォルダに.gitフォルダが作成されます。.gitフォルダには履歴情報が保存されるため、通常は直接編集しません。

4-2. git status:変更状況を確認する

git statusは、現在の作業ツリーの状態を確認するコマンドです。どのファイルが変更されたのか、どのファイルがステージングされているのか、未追跡ファイルがあるのかを確認できます。

Bash
git status

C#開発では、コミット前に必ずgit statusを確認する習慣をつけると安全です。たとえば、binobjなど本来コミットすべきでないファイルが表示されている場合、.gitignoreの設定を見直す必要があります。

4-3. git add:変更ファイルをステージングする

git addは、変更ファイルをステージングするコマンドです。次のコミットに含めたいファイルを指定します。

Bash
git add Program.cs

すべての変更をステージングする場合は、次のように実行します。

Bash
git add .

ただし、git add .は現在のフォルダ以下の変更をまとめて追加するため、不要なファイルまで含めてしまうことがあります。C#プロジェクトでは、.gitignoreを設定したうえで、git statusで内容を確認してから実行しましょう。

4-4. git commit:変更履歴を保存する

git commitは、ステージングした変更を履歴として保存するコマンドです。

Bash
git commit -m "ユーザー登録処理を追加"

コミットは、Gitにおける履歴の単位です。C#開発では、機能追加、バグ修正、リファクタリング、設定変更など、意味のある単位でコミットを分けることが重要です。

たとえば、Entity Framework Coreのマイグレーション追加、Controllerの修正、画面表示の変更をすべて1つにまとめると、あとで原因調査が難しくなります。作業内容ごとにコミットを分けることで、履歴が読みやすくなります。

4-5. git log:コミット履歴を確認する

git logは、過去のコミット履歴を確認するコマンドです。

Bash
git log

簡潔に表示したい場合は、次のように実行します。

Bash
git log --oneline

git logを使うと、コミットID、作成者、日時、コミットメッセージを確認できます。不具合がいつ入ったのか、どの変更が原因なのかを調べるときに役立ちます。

Visual Studioでも履歴画面からコミット一覧を確認できますが、コマンドラインのgit log --onelineを覚えておくと素早く履歴を見られます。

4-6. git diff:変更前後の差分を確認する

git diffは、変更前後の差分を確認するコマンドです。

Bash
git diff

ステージング済みの差分を確認する場合は、次のように実行します。

Bash
git diff --staged

C#開発では、コミット前にgit diffで差分を確認することが大切です。不要なデバッグコード、仮のコメント、テスト用の接続文字列などが残っていないか確認できます。

Visual Studioの差分表示でも同じように確認できます。画面上で確認するか、コマンドで確認するかは好みですが、どちらの方法でも「コミット前に差分を見る」習慣を持つことが重要です。

4-7. Visual Studio操作とGitコマンドの対応表

Visual Studioの操作対応するGitコマンド内容
Gitリポジトリを作成git initプロジェクトをGit管理にする
Git変更ウィンドウで変更確認git status変更状況を確認する
差分を表示git diff変更前後を比較する
ステージするgit addコミット対象を選ぶ
コミットするgit commit変更履歴を保存する
履歴を表示git logコミット履歴を確認する
ブランチを作成git branch / git switch -c作業ブランチを作る
ブランチを切り替えgit switch作業先を変更する
GitHubへ送信git pushローカルの変更をリモートへ反映する
GitHubから取得git pull / git fetchリモートの変更を取得する

Visual StudioだけでGit操作を完結することもできますが、コマンドとの対応を知っておくと理解が深まります。トラブル時にはコマンドで状態を確認する場面もあるため、基本コマンドは覚えておきましょう。

5. GitHubと連携してC#コードをリモート管理する方法

5-1. GitHubリポジトリを作成する

GitHubでC#コードを管理するには、まずGitHub上にリポジトリを作成します。リポジトリ名は、プロジェクト名に合わせると分かりやすくなります。たとえば、MyTodoAppCustomerManagementSystemAspNetCoreSampleのように命名します。

公開範囲は、誰でも見られるPublicと、自分や招待したメンバーだけが見られるPrivateから選べます。業務コードや学習中でも公開したくないコードはPrivateにしましょう。

GitHub側でREADMEや.gitignoreを作成することもできますが、すでにローカルでC#プロジェクトを作成している場合は、空のリポジトリを作成してからローカルリポジトリをプッシュする流れが分かりやすいです。

5-2. Visual StudioからGitHubにサインインする

Visual StudioからGitHubを使う場合は、Visual Studioのアカウント機能でGitHubにサインインします。サインインすると、Visual Studio上からGitHubリポジトリのクローン、プッシュ、Pull Request関連の操作などが行いやすくなります。

MicrosoftのVisual Studioドキュメントでは、GitHubアカウントを使うことでVisual Studio IDE内からコード管理や共同開発を行えると説明されています。

認証がうまくいかない場合は、Visual Studioに登録しているアカウント、GitHub側の認証設定、2要素認証、会社ネットワークの制限などを確認しましょう。

5-3. ローカルリポジトリをGitHubにプッシュする

ローカルのC#プロジェクトをGitHubに送信する操作をプッシュといいます。Visual Studioでは、GitメニューやGit変更ウィンドウからリモートリポジトリを設定し、GitHubへプッシュできます。Microsoftのドキュメントでも、Visual StudioからローカルプロジェクトをGitHubやAzure DevOpsなどのリモートへプッシュする手順が案内されています。

コマンドラインでは、一般的に次のような流れになります。

Bash
git remote add origin https://github.com/ユーザー名/リポジトリ名.git
git branch -M main
git push -u origin main

最初のプッシュでは、ローカルリポジトリとGitHubリポジトリを関連付けます。以降は、通常次のコマンドで変更を送信できます。

Bash
git push

5-4. GitHub上のC#プロジェクトをクローンする

GitHub上にあるC#プロジェクトを自分のPCにコピーする操作をクローンといいます。GitHub Docsでは、リポジトリのページからURLをコピーし、git cloneコマンドでローカルクローンを作成する手順が案内されています。

コマンドラインでは、次のように実行します。

Bash
git clone https://github.com/ユーザー名/リポジトリ名.git

Visual Studioでは、起動画面やGitメニューから「リポジトリのクローン」を選択し、GitHubのURLを入力します。クローン後に.slnファイルを開けば、C#プロジェクトとして開発を始められます。

チーム開発に参加するときや、別PCで同じプロジェクトを開発するときは、クローン操作を使います。

5-5. git push・git pull・git fetchの違い

git pushgit pullgit fetchは、GitHubなどのリモートリポジトリとやり取りするときによく使うコマンドです。

git pushは、ローカルのコミットをリモートリポジトリへ送信するコマンドです。自分のPCで行ったC#コードの変更をGitHubに反映するときに使います。

git fetchは、リモートリポジトリの最新情報を取得するコマンドです。ただし、取得した内容を現在の作業ブランチには自動で反映しません。リモートにどのような変更があるか確認したいときに使います。

git pullは、リモートの変更を取得して、現在のブランチに統合するコマンドです。Git公式ドキュメントでも、git pullはリモートリポジトリから変更を取り込み、まずgit fetchを実行してから現在のブランチへ統合すると説明されています。

簡単にまとめると、送るのがpush、確認用に取得するのがfetch、取得して反映するのがpullです。

5-6. リモートリポジトリとの同期で注意すべきこと

GitHubと連携してC#開発を行う場合、リモートリポジトリとの同期タイミングに注意が必要です。

作業を始める前には、まずgit pullで最新状態を取得しましょう。古い状態のまま作業を始めると、あとで他のメンバーの変更と衝突する可能性があります。

また、コミットしていない変更がある状態でpullすると、コンフリクトやエラーが発生することがあります。作業中の変更をコミットするか、一時退避してからpullするのが安全です。

チーム開発では、同じファイルを複数人が同時に変更するとコンフリクトが起きやすくなります。特にC#の同じクラス、同じメソッド、.csprojファイル、設定ファイルなどは衝突しやすいため、作業範囲を事前に共有しておくとよいでしょう。

6. C#開発で必要になるブランチ操作とマージ

6-1. ブランチとは?機能追加や修正で分ける理由

ブランチとは、開発作業を分岐させるための仕組みです。mainブランチに安定版のコードを残したまま、新機能追加やバグ修正を別ブランチで進められます。

たとえば、C#のWebアプリでログイン機能を追加する場合、feature/loginというブランチを作成します。そのブランチ上でController、View、サービスクラス、テストコードを変更し、動作確認が完了したらmainブランチにマージします。

ブランチを使わずにmainブランチで直接作業すると、途中の未完成コードが安定版に混ざってしまいます。ブランチを分けることで、作業中の変更と公開可能なコードを分離できます。

6-2. Visual Studioでブランチを作成・切り替えする

Visual Studioでは、Gitリポジトリウィンドウや画面右下のブランチ表示から、ブランチの作成や切り替えができます。

新しい機能を追加するときは、mainブランチを最新にしてから新しいブランチを作成します。ブランチ名は、作業内容が分かる名前にします。

feature/user-registration
feature/payment-page
fix/login-validation
fix/null-reference-error

Visual Studio上でブランチを切り替えると、作業ツリーのファイルもそのブランチの状態に変わります。未コミットの変更がある状態で切り替えようとするとエラーになることがあるため、切り替え前にコミットするか変更を退避しましょう。

6-3. git branch・git switch・git checkoutの使い方

ブランチ操作でよく使うコマンドは、git branchgit switchgit checkoutです。

ブランチ一覧を確認するには次のコマンドを使います。

Bash
git branch

新しいブランチを作成して切り替えるには、次のように実行します。

Bash
git switch -c feature/login

既存のブランチに切り替える場合は次のようにします。

Bash
git switch main

以前はgit checkoutがブランチ切り替えによく使われていました。Git公式ドキュメントでも、git checkout -bで新しいブランチを作成して切り替えられることが説明されています。

Bash
git checkout -b feature/login

現在は、ブランチ切り替えにはgit switchを使うと意味が分かりやすいため、初心者にはgit switchがおすすめです。

6-4. 変更をマージする手順

マージとは、別ブランチで行った変更を現在のブランチに統合する操作です。たとえば、feature/loginブランチでログイン機能を完成させたあと、その変更をmainブランチに取り込む場合に使います。

基本的な流れは次のとおりです。

Bash
git switch main
git pull
git merge feature/login

まずmainブランチに切り替え、リモートの最新状態を取得します。その後、作業ブランチをマージします。問題がなければ、変更がmainブランチに統合されます。

GitHubを使う場合は、直接git mergeするのではなく、Pull Requestを作成してレビュー後にマージする運用がよく使われます。GitHub Docsでも、対象ブランチを選び、Compare & pull requestからPull Requestを作成する流れが案内されています。

6-5. コンフリクトが起きる原因と解決方法

コンフリクトとは、Gitが自動で変更を統合できない状態です。たとえば、同じC#ファイルの同じ行を複数のブランチで編集した場合、どちらの変更を採用すべきかGitが判断できず、コンフリクトになります。

コンフリクトが起きると、対象ファイルに次のようなマーカーが表示されます。

<<<<<<< HEAD
現在のブランチの内容
=======
取り込もうとしているブランチの内容
>>>>>>> feature/login

解決するには、ファイルを開いて必要な内容に修正し、マーカーを削除します。その後、修正したファイルをステージングしてコミットします。

Bash
git add 対象ファイル
git commit

Visual Studioでは、マージエディターを使ってコンフリクトを解決できます。現在の変更、相手の変更、統合結果を見比べながら選択できるため、コマンドに慣れていない場合でも対応しやすいです。

6-6. チーム開発で使いやすいブランチ運用ルール

チーム開発では、ブランチ運用ルールを決めておくと混乱を防げます。代表的なルールは、mainブランチを常に安定状態に保つことです。動作確認が終わっていないコードやレビュー前のコードをmainに直接入れないようにします。

機能追加ではfeature/機能名、バグ修正ではfix/修正内容のように命名ルールをそろえると、ブランチ一覧を見ただけで目的が分かります。

また、作業ブランチは長期間放置しないことも大切です。長く分岐したままにすると、mainブランチとの差分が大きくなり、マージ時のコンフリクトが増えます。小さく作って早めにPull Requestを出す運用が、C#開発でも扱いやすい方法です。

7. C#プロジェクトで設定すべき.gitignoreと管理対象ファイル

7-1. C#開発でGit管理すべきファイル・除外すべきファイル

C#プロジェクトでは、Gitで管理すべきファイルと、管理しないほうがよいファイルを分ける必要があります。

管理すべきファイルは、ソースコードやプロジェクト構成に必要なファイルです。たとえば、.csファイル、.csprojファイル、.slnファイル、appsettings.jsonのテンプレート、テストコード、READMEなどです。

一方、除外すべきファイルは、ビルド時に自動生成されるファイル、個人環境に依存するファイル、機密情報を含むファイルです。代表例として、binobj.vs、ユーザー固有の設定ファイル、ログファイル、秘密情報を含む設定ファイルなどがあります。

不要なファイルをGit管理に含めると、リポジトリのサイズが大きくなったり、他のメンバーの環境で不要な差分が出たりします。C# git運用では、最初に.gitignoreを整えることが大切です。

7-2. bin・obj・.vsフォルダを除外する理由

binフォルダには、ビルド結果の実行ファイルやDLLなどが生成されます。objフォルダには、ビルドの中間ファイルが生成されます。これらはソースコードから再生成できるため、基本的にGitで管理する必要はありません。

.vsフォルダには、Visual Studioのユーザー固有設定や一時ファイルが含まれます。個人環境に依存するため、チームで共有すると不要な差分や環境差異の原因になります。

GitHubのVisualStudio用.gitignoreテンプレートでも、Visual Studioの一時ファイル、ビルド結果、アドオンによって生成されるファイルを無視する目的が示されています。

C#プロジェクトでは、binobj.vsをコミットしないことを基本ルールにしましょう。

7-3. Visual Studio用.gitignoreの作成方法

.gitignoreは、Git管理から除外するファイルやフォルダを指定するファイルです。C#プロジェクトでは、リポジトリのルートに.gitignoreを作成します。

基本的な例は次のとおりです。

gitignore
bin/
obj/
.vs/
*.user
*.suo
*.rsuser
*.log

より本格的に設定する場合は、GitHubが公開しているVisualStudio用.gitignoreテンプレートを参考にすると便利です。GitHubのgitignoreリポジトリには、Visual Studio向けテンプレートが用意されています。

Visual StudioからGitHubリポジトリを作成する場合、テンプレートとしてVisual Studio用の.gitignoreを選べることもあります。既存プロジェクトでは、最初のコミット前に.gitignoreを追加しておきましょう。

7-4. appsettings.jsonや接続文字列を扱うときの注意点

ASP.NET CoreなどのC#プロジェクトでは、appsettings.jsonに接続文字列やAPIキーを設定することがあります。しかし、パスワード、秘密鍵、本番環境の接続文字列などをGitHubにプッシュするのは危険です。

公開リポジトリはもちろん、Privateリポジトリであっても機密情報はできるだけ含めない運用が望ましいです。設定値は環境変数、ユーザーシークレット、CI/CDのシークレット機能などで管理しましょう。

開発用の設定例を共有したい場合は、次のようにテンプレートファイルを用意します。

appsettings.Development.example.json

実際の機密情報を含むファイルは.gitignoreに追加します。

gitignore
appsettings.Development.json

ただし、プロジェクトによってはappsettings.json自体を共有する必要があります。その場合は、機密情報を含めず、サンプル値や空文字にしておくと安全です。

7-5. すでにコミットした不要ファイルをGit管理から外す方法

.gitignoreに追加しても、すでにGit管理されているファイルは自動では外れません。たとえば、binobjを一度コミットしてしまった場合、.gitignoreに書いただけでは追跡が続きます。

Git管理から外し、ファイル自体はローカルに残したい場合は、次のコマンドを使います。

Bash
git rm -r --cached bin obj .vs
git commit -m "不要なビルド生成物をGit管理から除外"

--cachedを付けることで、Gitの追跡対象からは外しますが、ローカルファイルは削除されません。

機密情報を誤ってコミットした場合は、単に削除コミットを作るだけでは履歴に残る可能性があります。その場合は、キーやパスワードをすぐに無効化し、必要に応じて履歴の削除対応を検討してください。

8. C#開発でよくあるGitトラブルと対処法

8-1. コミット前の変更を取り消したい場合

コミット前の変更を取り消したい場合は、まずgit statusで状態を確認します。まだステージングしていないファイルの変更を取り消す場合は、次のコマンドを使います。

Bash
git restore ファイル名

すでにステージングした変更をステージから外す場合は、次のようにします。

Bash
git restore --staged ファイル名

その後、必要に応じてgit restoreで作業ツリーの変更を取り消します。

Visual Studioでは、Git変更ウィンドウから対象ファイルを選び、変更を元に戻す操作ができます。ただし、この操作を行うと未コミットの変更は失われるため、必要なコードを消さないように注意しましょう。

8-2. コミット後に変更を戻したい場合

コミット後に変更を戻したい場合は、状況によって方法が変わります。

すでに共有済みのコミットを安全に取り消したい場合は、git revertを使います。

Bash
git revert コミットID

git revertは、対象コミットを打ち消す新しいコミットを作成します。履歴を壊さないため、チーム開発で使いやすい方法です。

一方、まだ自分のローカルだけで作業しているコミットをやり直したい場合は、git resetを使うこともあります。ただし、git reset --hardは変更を失う可能性があるため、慎重に使いましょう。

Bash
git reset --soft HEAD~1

--softを使うと、直前のコミットを取り消しつつ、変更内容はステージングされた状態で残ります。コミットメッセージを直したいときや、コミットを分け直したいときに使えます。

8-3. 間違ってプッシュしたときの対応

間違ってGitHubにプッシュした場合、まず落ち着いて影響範囲を確認します。単純なコードミスであれば、修正コミットを作って再度プッシュすれば問題ありません。

Bash
git add .
git commit -m "誤った実装を修正"
git push

すでにチームメンバーが取得している可能性があるコミットを無理に削除すると、他の人の作業に影響します。そのため、共有済みの履歴は基本的にgit revertで取り消すのが安全です。

機密情報をプッシュした場合は、対応が異なります。まずパスワード、APIキー、トークンなどをすぐに無効化します。そのうえで、履歴から削除する必要があるかを判断します。GitHub上に一度公開された秘密情報は、削除しても安全とは限らないため、認証情報のローテーションを最優先にしましょう。

8-4. pull時にエラーやコンフリクトが出た場合

git pull時にエラーが出る原因として多いのは、ローカルに未コミットの変更がある状態で、リモートの変更を取り込もうとしたケースです。

まず、現在の状態を確認します。

Bash
git status

必要な変更であればコミットします。

Bash
git add .
git commit -m "作業中の変更を保存"
git pull

まだコミットしたくない場合は、git stashで一時退避できます。

Bash
git stash
git pull
git stash pop

コンフリクトが発生した場合は、対象ファイルを開いて内容を修正します。C#ファイルでは、同じメソッドや同じプロパティを複数人が変更していると衝突しやすいです。修正後は、ビルドとテストを実行し、動作確認してからコミットしましょう。

8-5. Visual StudioとGitHubの認証エラーを解決する

Visual StudioからGitHubへプッシュやクローンをしようとして認証エラーが出る場合、まずVisual Studioにサインインしているアカウントを確認します。複数のMicrosoftアカウントやGitHubアカウントを使っていると、意図しないアカウントで認証されていることがあります。

次に、GitHub側でリポジトリへのアクセス権があるか確認します。Privateリポジトリの場合、招待されていないアカウントではアクセスできません。

また、古い認証情報がWindows資格情報マネージャーに残っていることもあります。その場合は、不要なGitHub関連の資格情報を削除し、再度Visual Studioからサインインします。

会社のPCやネットワークでは、プロキシやファイアウォールによってGitHubへの通信が制限されている場合があります。ブラウザでは見えてもGit操作だけ失敗することもあるため、ネットワーク設定も確認しましょう。

8-6. リポジトリが壊れた・履歴がおかしいと感じたときの確認手順

リポジトリが壊れたように見える場合や、履歴がおかしいと感じた場合は、まず慌てて削除や強制操作をしないことが大切です。

最初に状態を確認します。

Bash
git status
git log --oneline --graph --decorate --all

現在どのブランチにいるのか、どのコミットを指しているのか、リモートブランチとの差分があるのかを確認します。

次に、リモートの状態を取得します。

Bash
git fetch

git fetchは取得だけを行い、現在の作業内容を自動では変更しないため、状況確認に向いています。

どうしても状態が分からない場合は、GitHub上のリポジトリを別フォルダに新しくクローンし、正常な状態と比較する方法もあります。重要な未コミット変更がある場合は、フォルダごとバックアップしてから作業しましょう。

9. C#開発でGitを安全に使いこなすベストプラクティス

9-1. コミットは小さく分ける

C#開発でGitを使いこなすには、コミットを小さく分けることが重要です。1つのコミットに複数の目的を詰め込むと、履歴を見ても何をしたのか分かりにくくなります。

たとえば、次のような変更を1つにまとめるのは避けましょう。

ログイン機能追加
画面デザイン変更
DB接続設定変更
不要なクラス削除

これらは、それぞれ別の目的を持つ変更です。できるだけ目的ごとにコミットを分けることで、レビューもしやすくなり、不具合が入ったときの原因調査も簡単になります。

小さなコミットは、あとから戻しやすいという利点もあります。C# git運用では、「意味のある最小単位」でコミットする意識を持ちましょう。

9-2. コミットメッセージは変更内容が伝わるように書く

コミットメッセージは、変更履歴を読むための重要な情報です。次のようなメッセージは避けたほうがよいです。

修正
更新
作業中
いろいろ変更

代わりに、何を変更したのかが分かるように書きます。

ログイン失敗時のバリデーションメッセージを修正
商品検索APIにカテゴリ絞り込み条件を追加
注文登録処理のNullReferenceExceptionを修正

チームで開発する場合は、プレフィックスを決めるのも有効です。

feat: ユーザー登録画面を追加
fix: ログイン時の例外処理を修正
refactor: 注文計算ロジックをサービスクラスへ移動

将来の自分やチームメンバーが履歴を読んだときに、変更の目的を理解できることが大切です。

9-3. 作業前にpullして最新状態にする

チーム開発では、作業を始める前にgit pullで最新状態にする習慣をつけましょう。古い状態のまま作業すると、他のメンバーの変更と衝突しやすくなります。

Bash
git switch main
git pull
git switch -c feature/new-feature

このように、mainブランチを最新にしてから作業ブランチを作成すると、不要なコンフリクトを減らせます。

ただし、未コミットの変更がある状態でpullするのは避けましょう。作業中の内容をコミットするか、git stashで一時退避してから実行するのが安全です。

9-4. mainブランチへ直接コミットしない

mainブランチは、常に安定した状態にしておくべきブランチです。チーム開発では、mainブランチへ直接コミットせず、機能ブランチや修正ブランチを作成して作業します。

Bash
git switch main
git pull
git switch -c feature/user-profile

作業が完了したら、Pull Requestを作成してレビューを受け、問題がなければmainへマージします。この運用により、未完成のコードやレビュー前のコードがmainに入るのを防げます。

個人開発でも、mainブランチを安定版として扱う習慣をつけると、プロジェクトが大きくなったときに管理しやすくなります。

9-5. GitHubのPull Requestでコードレビューする

GitHubのPull Requestは、変更内容をレビューし、議論し、mainブランチへマージするための仕組みです。GitHub Docsでは、ブランチを選択してCompare & pull requestからPull Requestを作成する流れが説明されています。

C#開発では、Pull Requestで次のような点を確認します。

確認項目内容
ビルドが通るかコンパイルエラーがないか
テストが通るか単体テストや結合テストが成功するか
設計が適切かクラスやメソッドの責務が分かれているか
例外処理があるか異常系の処理が考慮されているか
機密情報がないか接続文字列やAPIキーが含まれていないか
不要な差分がないかフォーマット変更や生成物が混ざっていないか

Pull Requestを使うことで、コード品質を保ちやすくなり、チームメンバー間で知識共有もできます。

9-6. Visual Studio操作とコマンド操作を使い分ける

C#開発では、Visual StudioのGit機能とコマンドラインを使い分けると効率的です。

日常的な変更確認、ステージング、コミット、ブランチ切り替え、差分確認はVisual Studio上で行うと分かりやすいです。特にGit初心者にとっては、画面で変更内容を確認できるメリットがあります。

一方、履歴の詳細確認、トラブル対応、リモート状態の確認、特定のGit操作ではコマンドラインが便利です。たとえば、次のようなコマンドは覚えておくと役立ちます。

Bash
git status
git log --oneline --graph --decorate --all
git fetch
git diff

Visual Studioだけ、コマンドだけにこだわる必要はありません。重要なのは、Gitの考え方を理解し、状況に応じて安全な操作を選べることです。

まとめ

C#開発でGitを使うと、ソースコードの変更履歴を安全に管理でき、過去の状態確認、作業の切り戻し、ブランチによる機能追加、GitHubでのリモート管理、チーム開発でのコードレビューが行いやすくなります。

Gitは履歴管理の仕組み、GitHubはリモートリポジトリを管理・共有するサービス、Visual StudioはC#開発とGit操作を統合して行えるIDEです。この3つの役割を理解すると、C# git運用の全体像がつかみやすくなります。

まずは、Visual StudioでC#プロジェクトを作成するときにGitリポジトリを作り、変更を確認してコミットする流れに慣れましょう。次に、git statusgit addgit commitgit loggit diffなどの基本コマンドを覚えると、Visual Studioの画面操作の意味も理解しやすくなります。

GitHubと連携する場合は、プッシュ、プル、フェッチの違いを理解し、作業前に最新状態を取得する習慣をつけることが大切です。チーム開発では、mainブランチへ直接コミットせず、ブランチを作成してPull Requestでレビューする運用が安全です。

また、C#プロジェクトでは.gitignoreの設定も欠かせません。binobj.vsなどの自動生成ファイルや個人環境のファイルを除外し、接続文字列やAPIキーなどの機密情報をコミットしないようにしましょう。

Gitは最初こそ難しく感じますが、基本操作を繰り返すことで自然に身につきます。C#開発を安全かつ効率的に進めるために、Visual StudioのGit機能と基本コマンドを組み合わせながら、日々の開発に取り入れていきましょう。