目次

第1章:Sourcetreeとは?

1.1 バージョン管理って何?

プログラムやドキュメントを作成すると、何度も修正や更新を行います。そのたびに「以前の状態に戻したい」「誰がどの変更を加えたのか知りたい」と思うことはありませんか?
こうした変更履歴を記録し、管理する仕組みをバージョン管理といいます。

バージョン管理を使うと、次のようなメリットがあります。

履歴管理:Gitフォルダ内の変更を監視・追跡し、必要に応じて戻すことが可能。

過去の変更を追跡し、必要に応じて戻すことが可能。

ブランチ機能:開発の枝分かれを作り、並行作業が容易。

開発の枝分かれを作り、並行作業が容易。

共同作業:GitHubなどのリモートリポジトリと連携し、チーム開発がしやすい。

リモートリポジトリと連携し、チーム開発がしやすい。

バージョン管理システムの中で、最も広く使われているのがGit(ギット)です。

イギリス英語のスラングで【git】には間抜けという意味があります。


1.2 GitとSourcetreeの関係

Gitは、ファイルの変更履歴を記録するツールです。しかし、Gitの操作は基本的にコマンドライン(黒い画面)で行います。
初心者にとっては少し難しく感じるかもしれません。

そこで登場するのがSourcetree(ソースツリー)です。

Sourcetreeは、Gitの操作を視覚的にわかりやすくしてくれる無料のツールです。
例えば、以下のような操作をマウス操作で簡単に行えます。

  • ファイルの変更を保存(コミット)
  • 過去の履歴を確認
  • 新しいブランチ(作業用の枝)を作成
  • 変更を統合(マージ)

つまり、Sourcetreeを使えば、難しいコマンドを覚えなくてもGitを活用できるのです!


1.3 Sourcetreeのインストールと初期設定

Sourcetreeを使うには、まずインストールが必要です。

1.3.1 Sourcetreeのダウンロード

  1. Sourcetree公式サイトにアクセス
  2. Windowsのインストーラーをダウンロード
  3. ダウンロードしたファイルを開き、画面の指示に従ってインストール

1.3.2 初期設定

インストール後、最初に行う設定は以下のとおりです。

  1. Gitの設定
    Sourcetreeでは、内部でGitを使用します。初回起動時に自動で設定されることが多いですが、必要に応じてGitのパスを指定します。
  2. リモートリポジトリの設定(省略可)
    初心者のうちは、ローカル(自分のパソコン)だけでGitを使うことができます。
    そのため、GitHubなどの外部サービスとの連携は後回しにしても問題ありません。
  3. ユーザー情報の登録
    コミットの記録に使用する「ユーザー名」と「メールアドレス」を設定します。
    • 例:
      • ユーザー名: Yamazaki Yusei
      • メールアドレス: example@example.com

設定が完了すれば、Sourcetreeの準備は完了です!
次の章では、実際にリポジトリを作成し、Gitの基本操作を体験してみましょう。

第2章:基本のGit操作

2.1 リポジトリを作成しよう

リポジトリとは?

Gitでは、ファイルやその変更履歴を管理するための「フォルダ」のようなものをリポジトリと呼びます。
リポジトリを作成すると、そのフォルダ内のファイルの変更履歴を記録できるようになります。

英語の【repository】には保管場所という意味があります。

Sourcetreeでリポジトリを作成する

  1. Sourcetreeを開く
  2. 画面上部の「+ Create」をクリック
  3. リポジトリの保存先のパスを選択(例:C:\Users\ユーザー名\Documents\MyProject)
  4. 「作成」ボタンをクリック

→ これでリポジトリの準備ができました!このフォルダ内でGitによるバージョン管理が可能になります。

ローカルリポジトリを作成する練習問題

問題 1: 新しいフォルダを作成してローカルリポジトリを作る

手順:

  1. Windowsでデスクトップに自分の名前で新しいフォルダーを作成する(例: yusei)。
  2. SourceTreeを開き、「ローカルリポジトリ」タブを開く。
  3. 「新規リポジトリを作成」ボタンをクリックし、作成したフォルダを選択する。
  4. 「作成」ボタンを押す。
  5. フォルダー内に .git フォルダーが作成されていることを確認する。

問題 2: Git管理されているフォルダーを通常のフォルダーに戻す

目的:

.gitフォルダーを誤って削除するとGitの管理下から外れてしまうので注意する。

手順:

  1. 問題1で作成したフォルダーをWindowsのエクスプローラーで開く。
  2. .git フォルダーが表示されていない場合はエクスプローラーの「表示」タブで「隠しファイル」を有効にする。
  3. .git フォルダーを削除する。
  4. SourceTreeの「ローカルリポジトリ」タブでフォルダを開き、リポジトリが管理対象外になったことを確認する。

問題 3: Git管理を解除した後に再度リポジトリ化

手順:

  1. 問題2でGit管理を解除する。
  2. SourceTreeで該当フォルダを開く。
  3. 「新規リポジトリを作成」ボタンをクリックし、再びリポジトリを作成する。
  4. フォルダ内に新しいテキストファイルを作成し、適当な内容を書いて保存する。
  5. SourceTreeでファイルが「未追跡」として表示されることを確認する。
  6. .git フォルダーが再び作成され、Git管理が有効になっていることを確認する。

問題 4: フォルダはGitの管理対象でないことを確認

手順:

  1. 問題3のリポジトリ内に新しいフォルダを作成する。
  2. SourceTreeの「ファイルステータス」タブを開く。
  3. 新しいフォルダがGitの管理対象でないことを確認する(通常、空のフォルダは管理されない)。

問題 5: ファイルの移動は「削除と作成」として認識されることを確認

手順:

  1. 問題4で作成したフォルダの中に新しいファイルを作成する。
  2. SourceTreeの「ファイルステータス」タブを開き、ファイルがGitの管理対象であることを確認する。
  3. 問題3で作成したファイルを、問題4で作成したフォルダに移動する。
  4. SourceTreeの「ファイルステータス」タブを開くと、ファイルの削除(D: 削除)と新規作成(U: 未追跡)として記録されていることを確認する。
  5. ファイルをGit管理外のフォルダに移動すると、削除として記録されることを確認する。

問題 6: コミット前にファイルの内容を元に戻せば変更とはみなされないことを確認

手順:

  1. Git管理されているファイルを開き、内容を変更する。
  2. SourceTreeの「ファイルステータス」タブを開くと、変更が検出される。
  3. 変更内容を元の状態に戻して保存する。
  4. SourceTreeを更新し、変更がない(ステージングされていない)状態になっていることを確認する。

この手順で、SourceTreeを使ったGit管理の基本操作を学ぶことができます。


2.2 ファイルを追加・変更してコミットする

コミットとは?

コミットとは、ファイルの変更を記録する操作です。
「この時点での状態を保存する」というイメージを持つとわかりやすいです。

英語の【commit】には確定という意味があります。

ファイルを追加してコミットしてみよう

  1. 作成したリポジトリのフォルダを開き、新しいファイル(例:README.txt)を作成
  2. Sourcetreeに戻ると、新しいファイルが「作業ツリーのファイル」に表示される
  3. 追加したいファイルを選択し、「ステージング(インデックス)」に追加
  4. 「コミットメッセージ」を入力(例:「最初のファイルを追加」)
  5. 「コミット」ボタンをクリック

→ これで変更が保存されました!以降、ファイルを編集するたびに、適宜コミットを行いましょう。

なぜ、ステージングエリアがあるのか?

Gitのステージングエリア(インデックス)は、コミットの前に変更を一時的に管理するための領域です。変更を細かく管理しながら、適切な状態でコミットできるようになります。

例えば、複数のファイルを編集した際に、一部だけをコミットしたい場合、その一部をステージングエリアに追加し、残りは後回しにできます。また、変更を確認しながらコミット内容を整理できるため、意図しない変更の混入を防ぎ、履歴を綺麗に保つことが可能になるのです。

コミットを行う練習問題

問題 1: 新しいファイルを作成してコミットする

手順:

  1. 新しいファイル(例: test.txt)を作成し、適当な文字列を書き込む。
  2. SourceTreeの「ファイルステータス」タブを開く。
  3. 「U」(未追跡)と表示されていることを確認する。
  4. 「ステージに追加」ボタンをクリックしてステージングする(ステージングされた変更が①になる)。
  5. コミットメッセージを入力(例: "初回コミット")。
  6. 「コミット」ボタンをクリックしてコミットする。
  7. 「ログ」タブを開き、コミットが履歴に記録されていることを確認する。

問題 2: 既存ファイルを変更してコミットする

目的:

変更を加え、コミットする流れを理解する。

手順:

  1. 問題1で作成したファイルを開く。
  2. 文字列を書き込む。
  3. SourceTreeの「ファイルステータス」タブを開き、「M」(変更済み)と表示されていることを確認する。
  4. 「ステージに追加」ボタンをクリックしてステージングする。
  5. コミットメッセージを入力(例: "見出しを追加")。
  6. 「コミット」ボタンをクリックしてコミットする。
  7. 「ログ」タブで履歴に記録されている(枝が伸びた)ことを確認する。

問題 3: ファイルを削除してコミットする

目的:

ファイル削除のコミットを体験する。

手順:

  1. これまで使用してきたファイルを削除する。
  2. SourceTreeの「ファイルステータス」タブを開く。
  3. 「D」(削除)と表示されていることを確認する。
  4. 「ステージに追加」ボタンをクリックしてステージングする。
  5. コミットメッセージを入力(例: "test.txt を削除")してコミットする。
  6. 「ログ」タブで履歴に記録されていることを確認する。

問題 4: 複数の操作をまとめてコミットする

手順:

  1. 複数のファイルを作成する。
  2. SourceTreeの「ファイルステータス」タブを開く。
  3. Shiftキーを押しながら複数のファイルを選択してステージングする。
  4. コミットメッセージを入力(例: "test1.txt, test2.txtを作成")してコミットする。
  5. 「ログ」タブで履歴に記録されていることを確認する。

コミットの頻度について

最初は実行前に頻繁にコミットし、徐々に機能ごとの塊でコミットするように意識すると良い。


2.3 変更履歴を確認する

変更履歴を確認することで、過去の編集内容を把握できます。

Sourcetreeで履歴を確認する

  1. Sourcetreeの画面左側にある「History」タブをクリック
  2. これまでに行ったコミットが一覧表示される
  3. 各コミットをクリックすると、変更内容を確認できる

履歴の色の意味

  1. 削除された行(赤色・"-" 表示)
    • 変更前のコードが削除されたことを示します。
    • - が行の先頭につき、背景が赤くなります。
  2. 追加された行(緑色・"+" 表示)
    • 新しく追加されたコードを示します。
    • + が行の先頭につき、背景が緑になります。
  3. 変更された部分(黄・オレンジ系)(プラスアルファ)
    • 追加・削除ではなく、一部の変更がある行を示すことがあります。
    • 特に、改行の変更やスペースの追加・削除などがある場合に、ハイライトされることがあります。

過去の状態に戻す

もし「間違えた変更をしてしまった!」という場合でも、Gitでは簡単に以前の状態に戻せます。

  1. 「コミット」タブから戻りたいコミットを選択
  2. 右クリックして「このコミットまでリセット」→「Hard - 全ての作業コピーの変更を破棄」

→ これで指定した時点まで戻せます(ただし、注意して使いましょう!)

参考

リセットの3つのモード

モードコミットステージング作業ディレクトリ
--soft取り消す保持保持
--mixed取り消す取り消す保持
--hard取り消す取り消す取り消す

リセットを学ぶ練習問題


問題 1: 変更を破棄する(ステージング前)
目的: ファイルの変更をコミット前に、ステージングせずに元に戻す方法を学ぶ。

手順:

  1. 新しいテキストファイルを作成する
  2. ステージングしてコミットする
  3. ファイルを開いて適当な文字列を記入して保存
  4. ソース管理ビューを開き、「M」(変更済み)と表示されていることを確認
  5. ファイル名の横にある「M」から左に2つ目の↶アイコンをクリック
  6. 確認メッセージが出るので「変更を破棄」をクリック
  7. 変更が元に戻り、ファイルが元の状態に戻っていることを確認

問題 2: --hard リセット(すべての変更を取り消す)
目的: コミット後に変更を完全に取り消し、ファイルも元の状態に戻す方法を学ぶ。

手順:

  1. Git Graphで戻したいコミットを右クリックし、「Reset current branch to this commit」を選択
  2. 確認メッセージが表示されたら「Hard - Discard all changes」を選択して「Yes, reset」をクリック
  3. ファイルを開き変更がすべて削除されていることを確認


これで、リポジトリの作成から基本的なファイル管理までの流れを理解できました。
次の章では、ブランチを使った作業の進め方を学んでいきます!

第3章:ブランチを使ってみよう

3.1 ブランチとは?

ブランチとは、作業の流れを分岐させる仕組みです。
本流(main または master)を維持したまま、新しい機能の開発や修正を行うために使用します。

英語の【branch】には枝という意味があります。

ブランチを使うメリット

  • 安全に開発できる → メインのコードに影響を与えずに作業できる
  • 並行作業ができる → 複数の機能を同時に開発可能
  • 問題がなければ統合できる → 完成したら元のブランチに簡単に戻せる

Sourcetreeを使えば、ブランチの操作を視覚的に簡単に行えます。


3.2 新しいブランチを作成する

例えば、新しい機能を開発するために「feature-1」というブランチを作成するとします。

Sourcetreeでブランチを作成する

  1. Sourcetreeを開く
  2. 画面上部の「ブランチ」ボタンをクリック
  3. 新しいブランチ名 を入力(例:「feature-1」)
  4. 「作成」ボタンを押す

→ これで「feature-1」ブランチが作成されました!このブランチで作業すれば、メインのコードに影響を与えずに開発できます。


3.3 ブランチを切り替える

作業中に別のブランチに移動することも簡単にできます。

Sourcetreeでブランチを切り替える

  1. 画面左側の「ブランチ」リストを開く
  2. 切り替えたいブランチ(例:「master」)をダブルクリック

→ これで「master」ブランチに戻れました!元の状態で作業を再開できます。


3.4 ブランチをマージする

ブランチで開発が完了したら、変更をメインのブランチ(master)に統合します。
この操作を マージ(merge) といいます。

Sourcetreeでブランチをマージする

衝突がない場合

  1. メインのブランチ(master)にスイッチする
  2. 画面上部の「マージ」ボタンをクリック
  3. マージするブランチ(例:「feature-1」)を選択
  4. 「OK」をクリック

ブランチの基本を学ぶ練習問題

問題 1: 新しいブランチを作成する
目的:SourcetreeのGUIを使って、新しいブランチを作成する。

手順:

  1. Sourcetreeで新しいフォルダー(例: branch_practice)を作成し、開く
  2. index.html を作成し、以下のコードを記述 <h1>ブランチの練習</h1>
  3. ソース管理ビュー(Ctrl + Shift + G)を開き、変更をステージングしてコミット
    • コミットメッセージ: "初回コミット"
  4. Sourcetreeの左下にあるブランチ名(main)をクリック
  5. 「ブランチの作成」を選択
  6. 新しいブランチ名を入力(例: feature-branch)
  7. 「ブランチを作成してチェックアウト」を選択
  8. 左下のブランチ名が feature-branch に変わっていることを確認

ブランチを作ることで、開発を安全かつ効率的に進める ことができます。
特にチーム開発では、ブランチを適切に管理することで 作業の分担が明確になり、競合を最小限に抑え、スムーズなリリースが可能になります。

「ブランチを作るかどうか?」を迷ったら、基本的には 「作るべき」 です!

問題 2: ブランチを切り替える
目的: 別のブランチに切り替え、変更履歴が独立していることを確認する。

手順:

  1. 現在の feature-branch で index.html を開き、以下のコードを追加 <p>新しい機能を追加中</p>
  2. ソース管理ビューで変更をコミット
    • コミットメッセージ: "新機能の追加"
  3. Git Graphでブランチ名 feature-branch をダブルクリックするとブランチが切り替わる
  4. 「main」に切り替えindex.html を開き、変更が反映されていないことを確認
  5. 「feature-branch」に切り替えindex.html を開き、変更が反映されていることを確認

feature-branch での変更が main には影響を与えず、それぞれのブランチが独立していることを確認。

現在のブランチを認識することは、 誤ったブランチでの作業を防ぐ、チーム開発をスムーズに進める、意図しないデプロイやトラブルを防ぐ ために非常に重要です。
作業前や重要な操作の前には、ブランチを確認する習慣をつける ことをおすすめします!

問題 3: ブランチの名前を変更する
目的: 既存のブランチの名前を変更する。

手順:

  1. 現在の feature-branch を開く
  2. 左下のブランチ名 feature-branch をクリック
  3. 「Rename Branch」を選択
  4. 新しい名前(例: new-feature)を入力
  5. 左下のブランチ名が new-feature に変わったことを確認
  6. Git Graphの名前も変わっていることを確認

チームで開発する場合、統一されたブランチ命名規則 を守ることで、コード管理が簡単になり、チーム全員が理解しやすくなります。「このブランチ名で、どんな変更をしているのか?」 が 一目で分かるようにする ことを意識しましょう!

問題 4: ブランチを削除する
目的: 使い終わったブランチを削除する。

手順:

  1. 現在のブランチを main に切り替える
  2. ブランチ名をクリック
  3. 「Delete Branch」を選択
  4. 確認ダイアログで「Yes, delete」を選択しマージされていないことの確認が出たら「Yes, force delete branch」をクリック
  5. ブランチリストを確認し、new-feature が削除されていることを確認

使い終わったブランチは、マージ後に削除するのが推奨されます。整理することで、プロジェクトの管理がスムーズになり、誤ったブランチの使用を防ぐことができます。ただし、メンテナンスが必要なブランチについては慎重に判断しましょう。

衝突がある場合

メインのブランチ(master)にスイッチする
Sourcetreeの画面左側のブランチ一覧から、master ブランチをダブルクリックしてチェックアウトします。

「マージ」ボタンをクリックする
画面上部の「マージ」ボタンをクリックします。

マージするブランチを選択する
例えば feature-1 ブランチを選択し、「OK」をクリックします。

競合(コンフリクト)の解決

  1. マージ時に「競合が発生しました」と表示された場合、該当のファイルを確認します。
  2. 競合があるファイルはSourcetreeの「作業ツリーのファイル」タブに表示されます。
  3. 該当ファイルをダブルクリックすると、競合の内容が表示されるので、手動で修正します。具体的には余分な文字を消したり、必要な文字を書いてあるべき状態に書き換えます。
  4. 競合を解決したファイルを保存します。

マージの完了

  1. すべての競合を解決したら、Sourcetreeで「コミット」を行います。
  2. メッセージを入力し、「コミット」をクリックすると、マージが完了します。
マージ後

→ これで「feature-1」の変更が「master」に統合されました!不要になったブランチは削除してもOKです。

マージを学ぶ練習問題

問題 1: 新しいブランチを作成してマージ

目的: 新しいブランチを作成し、変更を加えた後、メインブランチ(main)にマージする方法を学ぶ。

手順:

  1. Gitの管理対象フォルダにindex.html を作成し、以下のコードを記述して保存。 <h1>マージの練習</h1>
  2. ソース管理ビューを開き、ファイルをステージングし、コミット(例: "index.html 初回作成")。
  3. ブランチを作成する。
    • 左下のブランチ名(main)をクリック。
    • 「新しいブランチを作成」を選択し、名前を feature-branch にする。
    • 新しいブランチに切り替えたことを確認。
  4. index.html を編集し、以下を追加して保存。 <p>新しいブランチでの変更</p>
  5. ソース管理ビューで変更をステージングし、コミット(例: "feature-branch で変更")。
  6. Git Graph(拡張機能)を開く。
  7. ブランチ名をダブルクリックして切り替えmain を選択。
  8. Git Graphで feature-branch を右クリックし、「Merge into Current Branch(現在のブランチにマージ)」を選択。
  9. 確認画面で「Yes, merge」を選択。
  10. Git Graphでmain ブランチに feature-branch の変更が統合されていることを確認。
問題 2: 既存のブランチをマージ

目的: 既存の別のブランチを main にマージする方法を学ぶ。

手順:

  1. feature-branch を選択する
  2. style.css を作成し、以下のコードを記述。 body { background-color: lightgray; }
  3. ソース管理ビューで変更をステージングし、コミット(例: "CSSファイルを追加")。
  4. style.css に以下のコードを追加。 h1 { color: blue; }
  5. ソース管理ビューで変更をステージングし、コミット(例: "見出しの色を変更")。
  6. Git Graphを開く。
  7. main ブランチに切り替える。
  8. Git Graphでfeature-branchブランチを右クリックし、「Merge into Current Branch」を選択。
  9. ソース管理ビューで style.css の変更が main に統合されたことを確認。
問題 3: 複数のブランチを連続してマージ

目的: main に対して、複数の異なるブランチを順番にマージする。

手順:

  1. script.js を作成し、以下のコードを記述。 console.log("初期スクリプト");
  2. ソース管理ビューで変更をステージングし、コミット(例: "スクリプトを追加")。
  3. 新しいブランチ feature-1 を作成。
  4. script.js に以下のコードを追加。 console.log("機能1の追加");
  5. 変更をコミット(例: "feature-1 の変更")。
  6. 新しいブランチ feature-2 を作成。
  7. script.js に以下のコードを追加。 console.log("機能2の追加");
  8. 変更をコミット(例: "feature-2 の変更")。
  9. Git Graphを開く。
  10. main に切り替え、feature-1 をマージ。
  11. main に切り替え、feature-2 をマージ。
  12. Git Graphで script.js の変更が main に統合されたことを確認。
  13. 完了したら、script.js に両方の変更が反映されていることを確認。

できるだけシンプルなマージを心がけるべき!
特に 不要なブランチのマージを避け、履歴を明確に保つことが重要です。シンプルなマージを行うことで、コンフリクトの発生を防ぎ、履歴が見やすくなり、開発がスムーズに進みます。

コンフリクトの発生メカニズムと、その前にできる対応策を学ぶ練習問題

問題 1: 2つの異なるブランチで同じ行を変更する

目的: ブランチを作成し、同じ行を変更するとコンフリクトの原因になることを学ぶ。

手順:

  1. 新しいフォルダー(例: conflict_practice)を作成し、ローカルリポジトリにする。
  2. index.html を作成し、以下のコードを記述。 <h1>Gitのコンフリクト練習</h1>
  3. ソース管理ビューを開き、ファイルをステージングしてコミット(例: "初回コミット")。
  4. 新しいブランチ(例: feature-branch)を作成し、切り替え。
  5. index.html を編集し、以下のように文言を変更。 <h1>コンフリクトを試してみよう!</h1>
  6. 変更をステージングし、コミット(例: "ブランチで変更")。
  7. メインブランチ(main)に戻る。
  8. index.html を開き、以下のように文言を変更。 <h1>メインブランチで変更</h1>
  9. 変更をステージングし、コミット(例: "メインブランチで変更")。
  10. 完了したら、feature-branch と main で、同じ index.html の <h1> 部分が異なる状態になっていることを確認する。
問題 2: コンフリクトが起こる前の状態を確認する

目的: ブランチをマージする前に、コンフリクトの原因になることを理解する。

手順:

  1. Git Graphでmain をダブルクリックしてmainにいる状態にする。
  2. feature-branch の上で右クリック。
  3. 「…」(三点リーダー)をクリックし、「merge into current branch」を選択し確認画面で「Error:Unable to Merge Branch」が表示されたら「Dismiss」をクリックする。
  4. index.htmlを開く。
  5. 「どちらの変更を採用するか」のオプションが表示されることを確認。
  6. --hard リセット(すべての変更を取り消す)でマージをキャンセルする
問題 3: マージする前にコンフリクトを回避する

目的: コンフリクトが発生する前に、変更を整理しておくことができることを学ぶ。

手順:

  1. main にいる状態で、index.html の <h1> を feature-branch と同じに変更。 <h1>コンフリクトを試してみよう!</h1>
  2. 変更をステージングし、コミット(例: "コンフリクト回避の変更")。
  3. feature-branch をmain にマージ。
  4. コンフリクトが発生しないことを確認。
  5. 完了したら、事前に変更を揃えておくことで、コンフリクトを回避できることを理解する。

コンフリクトを解消する練習問題

問題 1: コンフリクトを発生させて解決する

目的: コンフリクトを発生させ、SourcetreeのGUIで解決する手順を学ぶ。

手順:

  1. 新しいフォルダー(例: conflict_resolution)を作成し、Sourcetreeで開く。
  2. index.html を作成し、以下のコードを記述。 <h1>Gitのコンフリクト練習</h1>
  3. ソース管理ビューを開き、ファイルをステージングしてコミット(例: "初回コミット")。
  4. 新しいブランチ(例: feature-branch)を作成し、切り替え。
  5. index.html を編集し、以下のように変更。 <h1>コンフリクトを解決しよう!(Featureブランチ)</h1>
  6. 変更をステージングし、コミット(例: "Featureブランチで変更")。
  7. メインブランチ(main)に戻る。
  8. index.html を開き、以下のように変更。 <h1>コンフリクトを解決しよう!(Mainブランチ)</h1>
  9. 変更をステージングし、コミット(例: "Mainブランチで変更")。
  10. ソース管理ビューを開き、メインブランチで feature-branch をマージ。
  11. 「…」(三点リーダー)→「ブランチをマージ」→ feature-branch を選択。
  12. コンフリクトが発生し、「どちらの変更を採用するか」のオプションが表示されることを確認。
  13. 完了したら、コンフリクトが発生し、解決する必要がある状態になっていることを確認。
問題 2: コンフリクトをGUIで解消する

目的: SourcetreeのGUIでコンフリクトを手動で解決する方法を学ぶ。

手順:

  1. コンフリクトが発生した状態のまま、index.html を開く。
  2. Sourcetreeが表示する「コンフリクト解決オプション」を確認。
  3. 「受け入れる変更を選択」を選び、両方の変更をマージする。 <h1>コンフリクトを解決しよう!(Featureブランチ & Mainブランチ)</h1>
  4. 修正後、ファイルを保存。
  5. ソース管理ビューで変更をステージング。
  6. コミットメッセージを入力(例: "コンフリクト解決")。
  7. 「✓」をクリックしてコミット。
  8. Git Graph(拡張機能)で履歴を確認し、マージが成功したことを確認。
  9. 完了したら、マージコミットが作成され、コンフリクトが解決されたことを確認。
問題 3: 「現在の変更を受け入れる」と「競合の変更を受け入れる」の違いを理解する

目的: 片方の変更のみを適用する場合の挙動を学ぶ。

手順:

  1. 問題1の状態を再度作り、コンフリクトを発生させる。
  2. index.html を開き、「現在の変更を受け入れる」を選択。
  3. 修正後、ファイルを保存。
  4. ソース管理ビューで変更をステージングし、コミット(例: "現在の変更のみ適用")。
  5. Git Graph で履歴を確認し、feature-branch の変更が取り込まれていないことを確認。
  6. 同じ手順で「競合の変更を受け入れる」を試し、今度は main の変更が取り込まれないことを確認。
  7. 完了したら、どちらの変更を選択するかによって、コミット内容が変わることを理解する。
問題 4: 異なるファイルでコンフリクトが発生する場合

目的: 同じファイルではなく、異なるファイルでの変更が競合するパターンを学ぶ。

手順:

  1. index.html と style.css を作成し、それぞれ以下の内容を書く。 <!-- index.html --> <h1>Gitのコンフリクト練習</h1> <link rel="stylesheet" href="style.css"> /* style.css */ body { background-color: white; }
  2. ソース管理ビューを開き、ステージング & コミット(例: "初回コミット")。
  3. 新しいブランチ(例: feature-style)を作成し、切り替え。
  4. index.html を変更。 <h1>Gitのコンフリクト練習 - Featureブランチ</h1>
  5. 変更をステージング & コミット(例: "Featureブランチの変更")。
  6. style.css を変更。 body { background-color: lightgray; }
  7. 変更をステージング & コミット(例: "Featureブランチのスタイル変更")。
  8. main に戻り、index.html と style.css の両方を変更。 <h1>Gitのコンフリクト練習 - Mainブランチ</h1> body { background-color: lightblue; }
  9. 変更をステージング & コミット(例: "Mainブランチの変更")。
  10. feature-style をマージしようとする。
  11. コンフリクトが発生しないことを確認。
  12. Git Graphで履歴を確認し、両方の変更が取り込まれたことを確認。
  13. 完了したら、異なるファイルでの変更はコンフリクトにならず自動的にマージされることを理解する。

これで、ブランチを活用した開発の基本を学べました。
次の章では、リモートリポジトリを使ってチームで作業する方法を学んでいきます!

第4章:リモートリポジトリを使う

4.1 リモートリポジトリとは?

これまで、Sourcetreeを使って自分のパソコン内(ローカル環境)でGitを管理してきました。
しかし、チームで作業する場合やバックアップを取るために、リモートリポジトリを活用することが一般的です。

リモートリポジトリとは?

  • クラウド上やサーバー上にあるGitリポジトリのこと
  • ローカル(自分のパソコン)と同期して使う
  • GitHubやなどのサービスを利用することが多い

本研修では、リモートリポジトリとしてGitHubを利用します。

4.1 GitHubアカウントの作成

GitHubを利用するためには、GitHubのアカウントが必要です。
まだ持っていない場合は、公式サイトからアカウントを作成してください。

GitHubアカウントの作成手順

GitHubを利用するには、以下の手順でアカウントを作成しましょう。

  1. GitHubの公式サイト にアクセスする。
  2. 「Sign up」をクリックし、ユーザー名、メールアドレス、パスワードを入力する。
  3. 画面の指示に従ってアカウントを作成し、メールの確認を行う。

4.2 SSHキーの登録(推奨)

EclipseとGitHubを連携するには、SSHキーまたはHTTPSの認証方式を設定する必要があります。
SSHを使用すると、毎回パスワードを入力する必要がなくなるため便利です。

4.2.1 SSHキーの生成

  1. ターミナルまたはコマンドプロンプトを開く
  2. 以下のコマンドを実行 ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
  3. ~/.ssh/id_rsa.pub の内容をコピー

SSHキーの解説

GitHubのSSHキーは、秘密鍵と公開鍵を用いた認証方式です。SSH接続では、ユーザーが持つ秘密鍵と、GitHubに登録した公開鍵を組み合わせて認証を行います。

秘密鍵(id_ed25519 など)はローカル環境に安全に保管し、他者と共有してはいけません。一方、公開鍵(id_ed25519.pub など)はGitHubに登録することで、SSH経由でのアクセスが可能になります。

SSHを使用すると、HTTPS認証のように毎回パスワードを入力せずに、リモートリポジトリとのやり取りが安全に行えます。

4.2.2 GitHubにSSHキーを登録

  1. GitHubの 「Settings」→「SSH and GPG keys」 を開く
  2. 「New SSH key」 をクリック
  3. 「Title」に適当な名前を入力(例: My Laptop)
  4. 先ほどコピーした SSHキーの内容をペースト
  5. 「Add SSH key」をクリック

これで、GitHubとEclipseの通信がスムーズになります



3. SSHキーをSourcetreeで使用する

SSH接続をSourcetreeで利用できるように設定します。

手順

  1. SSHエージェントに鍵を追加
    • ターミナルで以下のコマンドを実行:eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_rsa
    • Identity added: ~/.ssh/id_rsa と表示されればOK。
  2. リモートリポジトリのURLをSSHに変更
    • Sourcetreeで対象のリポジトリを開く。
    • 画面上部の「リモート」タブをクリック。
    • リモートリポジトリのURLをHTTPSからSSHに変更https://github.com/ユーザー名/リポジトリ名.git ↓ git@github.com:ユーザー名/リポジトリ名.git
    • 「OK」をクリック。
  3. 接続テスト
    • ターミナルで以下のコマンドを実行:ssh -T git@github.com
    • Hi ユーザー名! You've successfully authenticated, but GitHub does not provide shell access.
      と表示されれば成功。

4. SourcetreeでSSH経由でGitHubにアクセス

これで、SourcetreeからGitHubのリモートリポジトリへSSH接続が可能になります。

リポジトリのクローン(SSH経由)

  1. Sourcetreeを開く
  2. 「リモート」ボタンをクリック
  3. 「リモート」タブを開く
  4. リポジトリ設定
    • リモートリポジトリのURLをSSH形式で入力git@github.com:ユーザー名/リポジトリ名.git
    • クローン先のフォルダを選択
  5. 「クローン」ボタンをクリック
  6. SSHキーを使用してリポジトリにアクセス
    • これでSSH経由でリポジトリを利用できます。

この設定をすれば、GitHubのリポジトリをパスワードなしでSourcetreeから操作できます

リモートリポジトリを利用する練習問題

問題 1: GitHubのリモートリポジトリを作成し、VS Codeに接続する

目的: GitHubにリポジトリを作成し、VS Codeからリモートリポジトリを設定する。

手順:

  1. GitHubにアクセスし、ログインする。
  2. 右上の「+」ボタンをクリックし、「New repository」を選択。
  3. リポジトリ名を入力(例: vscode-github-practice)。
  4. 「Public」または「Private」を選択。
  5. 「Create repository」をクリック。
  6. VS Codeで新しいフォルダー(例: github_practice)を作成し開く。
  7. ソース管理ビュー(Ctrl + Shift + G)を開き、「リポジトリの初期化」ボタンをクリック。
  8. 「…」(三点リーダー)をクリックし、「リモートを追加」を選択。
  9. GitHubのリポジトリURLを入力(例: https://github.com/your-username/vscode-github-practice.git)。
  10. リモートの名前を origin に設定。
  11. 完了したら、VS Codeのソース管理ビューでリモートリポジトリが設定されていることを確認。
問題 2: ファイルを作成し、GitHubにプッシュする

目的: ローカルで作成したファイルをGitHubにアップロードする。

手順:

  1. index.html を作成し、以下の内容を記述。 <h1>Hello GitHub</h1>
  2. ソース管理ビューを開き、ファイルが「U(未追跡)」と表示されていることを確認。
  3. 「+」ボタンをクリックしてステージング。
  4. コミットメッセージを入力(例: "初回コミット")。
  5. 「✓」をクリックしてコミット。
  6. 「…」(三点リーダー)をクリックし、「変更をプッシュ」を選択。
  7. プッシュが完了したら、GitHub上で index.html がアップロードされていることを確認。
  8. 完了したら、GitHubのリポジトリページを開き、index.html が正しくプッシュされていることを確認。
問題 3: GitHub上で変更を加え、VS Codeにプルする

目的: GitHubで変更を行い、VS Codeで最新の状態を取得する。

手順:

  1. GitHubのリポジトリページを開く。
  2. index.html をクリックし、「Edit」ボタン(鉛筆マーク)を押す。
  3. 新しい行を追加。 <p>GitHubで変更しました</p>
  4. 「Commit changes」をクリックして変更を確定。
  5. VS Codeに戻り、「…」(三点リーダー)をクリックし、「プル」を選択。
  6. 変更がローカルに反映されていることを確認。
  7. 完了したら、index.html にGitHubで追加した変更がローカルに反映されていることを確認。
問題 4: 新しいブランチを作成し、GitHubにプッシュする

目的: VS Codeで新しいブランチを作成し、GitHubにプッシュする。

手順:

  1. ソース管理ビューを開く。
  2. 現在のブランチ名(例: main)をクリック。
  3. 「新しいブランチを作成」オプションを選択。
  4. 新しいブランチ名を入力(例: feature-branch)。
  5. ブランチを切り替えて、新しいファイル feature.txt を作成。
  6. 適当な内容を記述し、コミット。
  7. 「変更をプッシュ」をクリックし、GitHub上に新しいブランチが作成されていることを確認。
  8. 完了したら、GitHubの「Branches」タブに feature-branch が追加されていることを確認。

4.3 リポジトリをクローンする

クローン(clone) とは、リモートリポジトリのコピーを自分のパソコンに作成することです。
リモートリポジトリが用意されている場合、クローンすればすぐに作業を始められます。

Sourcetreeでリポジトリをクローンする

  1. Sourcetreeを開く
  2. 「リモート」ボタンをクリック
  3. 「リモート」タブを開く
リポジトリ設定
  1. リモートリポジトリのURLを入力(例:https://github.com/example/repository.git)
  2. クローン先のフォルダを選択(例:C:\Users\ユーザー名\Documents\Project)
  3. 「クローン」ボタンをクリック

→ これでリモートリポジトリのコピーがローカルに作成されました!

リモートリポジトリをローカルリポジトリにクローンする練習問題

問題 1: GitHubのリモートリポジトリを作成し、VS Codeに接続する

目的: GitHubにリポジトリを作成し、VS Codeからリモートリポジトリを設定する。

手順:

  1. GitHubにアクセスし、ログインする。
  2. 右上の「+」ボタンをクリックし、「New repository」を選択。
  3. リポジトリ名を入力(例: vscode-github-practice)。
  4. 「Public」または「Private」を選択。
  5. 「Create repository」をクリック。
  6. VS Codeで新しいフォルダー(例: github_practice)を作成し開く。
  7. ソース管理ビュー(Ctrl + Shift + G)を開き、「リポジトリの初期化」ボタンをクリック。
  8. 「…」(三点リーダー)をクリックし、「リモートを追加」を選択。
  9. GitHubのリポジトリURLを入力(例: https://github.com/your-username/vscode-github-practice.git)。
  10. リモートの名前を origin に設定。
  11. 完了したら、VS Codeのソース管理ビューでリモートリポジトリが設定されていることを確認。
問題 2: ファイルを作成し、GitHubにプッシュする

目的: ローカルで作成したファイルをGitHubにアップロードする。

手順:

  1. index.html を作成し、以下の内容を記述。 <h1>Hello GitHub</h1>
  2. ソース管理ビューを開き、ファイルが「U(未追跡)」と表示されていることを確認。
  3. 「+」ボタンをクリックしてステージング。
  4. コミットメッセージを入力(例: "初回コミット")。
  5. 「✓」をクリックしてコミット。
  6. 「…」(三点リーダー)をクリックし、「変更をプッシュ」を選択。
  7. プッシュが完了したら、GitHub上で index.html がアップロードされていることを確認。
  8. 完了したら、GitHubのリポジトリページを開き、index.html が正しくプッシュされていることを確認。
問題 3: GitHub上で変更を加え、VS Codeにプルする

目的: GitHubで変更を行い、VS Codeで最新の状態を取得する。

手順:

  1. GitHubのリポジトリページを開く。
  2. index.html をクリックし、「Edit」ボタン(鉛筆マーク)を押す。
  3. 新しい行を追加。 <p>GitHubで変更しました</p>
  4. 「Commit changes」をクリックして変更を確定。
  5. VS Codeに戻り、「…」(三点リーダー)をクリックし、「プル」を選択。
  6. 変更がローカルに反映されていることを確認。
  7. 完了したら、index.html にGitHubで追加した変更がローカルに反映されていることを確認。
問題 4: 新しいブランチを作成し、GitHubにプッシュする

目的: VS Codeで新しいブランチを作成し、GitHubにプッシュする。

手順:

  1. ソース管理ビューを開く。
  2. 現在のブランチ名(例: main)をクリック。
  3. 「新しいブランチを作成」オプションを選択。
  4. 新しいブランチ名を入力(例: feature-branch)。
  5. ブランチを切り替えて、新しいファイル feature.txt を作成。
  6. 適当な内容を記述し、コミット。
  7. 「変更をプッシュ」をクリックし、GitHub上に新しいブランチが作成されていることを確認。
  8. 完了したら、GitHubの「Branches」タブに feature-branch が追加されていることを確認。

4.4 変更をプッシュする

プッシュ(push) とは、ローカルの変更をリモートリポジトリに送信することです。

Sourcetreeでプッシュする

  1. 変更をコミットする(第2章参照)
  2. 画面上部の「プッシュ」ボタンをクリック
  3. プッシュ先のリモートブランチを確認
  4. 「プッシュ」ボタンを押す

→ これで変更がリモートリポジトリに反映されました!


4.5 最新の状態をプルする

プル(pull) とは、リモートリポジトリの最新の変更をローカルに取り込むことです。
チームで作業する場合、自分の変更をプッシュする前に必ずプルすることが重要です。

Sourcetreeでプルする

  1. 画面上部の「プル」ボタンをクリック
  2. プルするブランチを選択(通常はmaster)
  3. 「OK」をクリック

→ これで最新の状態を取得できました!

プルとプッシュを学ぶ練習問題

問題 1: リモートの変更をプルする

目的: VS CodeのGUIを使って、リモートの変更をローカルに取り込む方法を理解する。

手順:

  1. GitHubなどのリモートリポジトリを準備する。
  2. 事前に別のPCやブラウザ上で、リポジトリに変更を加えてコミットしておく。
    • 例: README.md に「リモートで追加した行」を追加。
  3. VS Codeで対象のリポジトリを開く。
  4. ソース管理ビュー(Ctrl + Shift + G)を開く。
  5. リモートに新しい変更があることを確認。
  6. ステータスバーの「↓」アイコン(プルボタン)がアクティブになっているか確認。
  7. 「↓」(プル)ボタンをクリック。
  8. 変更がローカルに取り込まれることを確認。
  9. README.md にリモートの変更が反映されていることを確認。
  10. 完了したら、リモートの変更がローカルに適用されていることを確認する。
問題 2: プル時の競合を体験する

目的: 同じ行をリモートとローカルで編集した場合にコンフリクトが発生することを理解する。

手順:

  1. 事前にGitHubなどで index.html を作成し、以下の内容でコミットする。 <h1>Git プルの練習</h1> <p>この文章はリモートで追加されました。</p>
  2. VS Codeで同じリポジトリを開く。
  3. ローカルで index.html を開き、同じ行を修正して保存。 <p>この文章はローカルで変更されました。</p>
  4. ローカルの変更をコミットせず、そのまま「↓」(プル)ボタンをクリック。
  5. コンフリクトが発生することを確認。
  6. ソース管理ビューに「マージの競合があります」と表示される。
  7. index.html を開くと、リモートとローカルの変更がどちらも表示されている。
  8. 競合解決ツールを使って適切な変更を選択し、ファイルを保存。
  9. ソース管理ビューで「マージの解決を完了」をクリックし、コミット。
  10. 完了したら、プル時の競合を体験し、解決できることを確認する。
問題 3: リモートの変更をプルせずにローカルで編集すると?

目的: ローカルの変更とリモートの変更が競合しない場合、プルがどのように動作するかを理解する。

手順:

  1. GitHubで script.js を作成し、以下の内容でコミットする。 console.log("リモートの変更");
  2. VS Codeで同じリポジトリを開く。
  3. ローカルで style.css を作成し、適当なCSSを記述。 body { background-color: lightgray; }
  4. 「↓」(プル)ボタンをクリック。
  5. コンフリクトが発生しないことを確認。
  6. script.js の変更がローカルに取り込まれ、style.css の変更はそのまま。
  7. 完了したら、競合しない場合、プルがスムーズに適用されることを確認する。
問題 4: プルしてからプッシュする習慣をつける

目的: ローカルで変更を加えてプッシュする前に、必ずリモートの変更を取り込む習慣を身につける。

手順:

  1. GitHubで config.json を作成し、以下の内容でコミット。 { "version": "1.0" }
  2. VS Codeで同じリポジトリを開く。
  3. ローカルで config.json を開き、以下の変更を加える。 { "version": "1.1" }
  4. ローカルの変更をコミットする。
    • 「+」ボタンをクリックし、ステージング。
    • 「アップデートしました」とコミットメッセージを入力し、コミット。
  5. そのままプッシュせずに、「↓」(プル)ボタンをクリック。
  6. リモートに新しい変更があった場合、競合が起こるかどうかを確認。
  7. 競合がない場合、そのまま config.json が更新される。
  8. 競合がある場合、マージコンフリクトの解決を行う(問題 2 参照)。
  9. プルが成功した後、「↑」(プッシュ)ボタンをクリックし、リモートに変更を反映。
  10. 完了したら、プルしてからプッシュすることで、最新の状態で作業できることを確認する。

プルリクエストの基本を学ぶ練習問題

問題 1: 新しいブランチを作成し、変更を加えてプルリクエストを作成する

目的: 直接 main を編集せず、新しいブランチで作業し、プルリクエストを作成する流れを学ぶ。

手順:

  1. VS Codeでリモートリポジトリをクローンする(GitHub上に既存のリポジトリがあることを前提)。
  2. ソース管理ビュー(Ctrl + Shift + G)を開く。
  3. 現在のブランチ名をクリックし、「新しいブランチを作成」を選択。
  4. ブランチ名を入力(例: feature-update)し、新しいブランチに切り替える。
  5. index.html を開き、以下の変更を加える。 <p>プルリクエストのテスト</p>
  6. ソース管理ビューで変更が検出されていることを確認。
  7. 「+」ボタンをクリックし、ステージングする。
  8. コミットメッセージを入力(例: "プルリクエストのための変更")し、「✓」をクリックしてコミット。
  9. 「変更をプッシュ」ボタンをクリックし、リモートへプッシュ。
  10. VS Codeの「GitHub拡張機能」を開き、「プルリクエストを作成」ボタンをクリック。
  11. プルリクエストのタイトルと説明を入力し、作成する。
  12. 完了したら、GitHub上でプルリクエストが作成されていることを確認。
問題 2: プルリクエストをレビューし、マージする

目的: プルリクエストをレビューし、問題がなければ main にマージする。

手順:

  1. GitHubのリポジトリページを開き、「Pull requests」タブをクリック。
  2. 作成したプルリクエストを選択。
  3. 「Files changed」タブで変更内容を確認。
  4. 「Review changes」ボタンをクリックし、「Approve」を選択。
  5. 「Merge pull request」ボタンをクリックし、main にマージ。
  6. 「Delete branch」ボタンが表示されたら、クリックして不要なブランチを削除する。
  7. 完了したら、main に変更が反映され、トピックブランチが削除されていることを確認。
問題 3: ローカルのブランチを整理する

目的: マージ後に不要になったローカルのトピックブランチを削除し、最新の main を取得する。

手順:

  1. VS Codeのブランチメニューを開く。
  2. main に切り替える。
  3. ソース管理ビューの「…」(三点リーダー)をクリックし、「リモートからプル」を実行。
  4. 「ブランチを削除」メニューを開き、feature-update ブランチを削除。
  5. ソース管理ビューで不要なブランチが削除されたことを確認。
  6. 完了したら、feature-update が削除され、リポジトリが整理されていることを確認。

これでリモートリポジトリの基本的な使い方がわかりました。
次の章では、よくある操作とトラブル対処について学んでいきます!

第5章:よくある操作とトラブル対処

5.1 コミットを取り消したい(リセットとリバート)

作業を進める中で、「間違えてコミットしてしまった!」ということはよくあります。
その場合、Gitではリセット(reset)やリバート(revert)を使って修正できます。

リセット(reset)

リセットは、指定したコミット以降の変更をなかったことにする方法です。
ただし、すでにプッシュしたコミットをリセットすると、他の人の作業に影響が出るため注意が必要です。

Sourcetreeでリセットする方法

  1. Sourcetreeの「コミット」タブを開く
  2. 取り消したいコミットを右クリック
  3. 「このコミットまでリセット」 を選択
  4. 「ハードリセット」 を選ぶと、コミットも変更も削除される(慎重に!)

→ リセットは、ローカルでのみ使うのが基本!


リバート(revert)

リバートは、「間違えたコミットを取り消すための新しいコミットを作成する」方法です。
プッシュ済みのコミットも影響なく取り消せるので、安全に使えます。

Sourcetreeでリバートする方法

  1. 「コミット」タブを開く
  2. 取り消したいコミットを右クリック
  3. 「このコミットをリバート」 を選択

→ リバートなら履歴を壊さずに修正できる!


5.2 間違えてプッシュしたときの対処法

誤ってリモートリポジトリにプッシュしてしまった場合、基本的にはリバートを使うのが安全です。
もし完全に取り消したい場合は、以下の方法もありますが、注意が必要です。

強制プッシュ(慎重に!)

リセットした後、強制的にリモートリポジトリを上書きする方法です。

Sourcetreeで強制プッシュする方法

  1. リセット(5.1の手順)を実行
  2. 画面上部の「プッシュ」ボタンをクリック
  3. 「強制プッシュ(--force)」にチェックを入れて実行

→ 強制プッシュは、チームで作業している場合は絶対に注意!


5.3 コンフリクトが発生した場合の解決方法

コンフリクト(conflict)とは?

コンフリクトとは、同じファイルの同じ部分を、異なる内容で編集した場合に発生する問題です。
Gitはどちらの変更を採用すべきかわからないため、手動で解決する必要があります。

コンフリクトが発生したら?

  1. Sourcetreeの「マージ」タブを開く → コンフリクトが発生しているファイルが表示される
  2. 該当ファイルをダブルクリック → エディタで開く
  3. 「どの変更を残すか」決めて修正
  4. 修正後、再度コミットしてプッシュ

→ コンフリクトを避けるには、こまめにプルしておくのが大事!


これで、よくある操作とトラブル時の対処方法を学びました。
次の章では、シンプルなブランチ構成での開発フローを紹介します!

第6章:シンプルなブランチ構成での開発フロー

6.1 シンプルなブランチ構成とは?

Gitのブランチ管理にはさまざまな方法がありますが、初心者向けにはできるだけシンプルな構成を採用するのがベストです。
ここでは、「master」と「feature」の2つのブランチだけを使う シンプルな運用方法を紹介します。

基本のブランチ構成

  1. masterブランチ → メインのコードが置かれる場所(安定版)
  2. featureブランチ → 新しい機能を開発するための作業ブランチ

→ 開発の流れ:
新しい機能を開発する場合、masterからfeatureブランチを作成し、作業が終わったらmasterに統合(マージ)します。


6.2 シンプルな開発の流れ

① masterブランチを最新の状態にしておく

作業を始める前に、masterブランチを最新の状態に更新しておきます。

  1. masterブランチにチェックアウト
  2. 「プル」ボタンを押して最新の状態に更新

② featureブランチを作成

新しい機能を開発するためにfeatureブランチを作成します。

  1. 「ブランチ」ボタンをクリック
  2. ブランチ名を入力(例:feature-login)
  3. 「作成」ボタンを押す

→ これでfeatureブランチが作成されました!


③ featureブランチで作業をする

作業中の変更は、こまめにコミットしておきます。

  1. ファイルを編集
  2. Sourcetreeで変更を確認し、「ステージング」に追加
  3. 適切なコミットメッセージを入力(例:「ログイン画面を作成」)
  4. 「コミット」ボタンを押す

→ 作業が進むごとに、定期的にコミットしておくと安心!


④ masterブランチに統合(マージ)

作業が完了したら、featureブランチの変更をmasterに統合します。

  1. masterブランチにチェックアウト
  2. 「マージ」ボタンをクリックし、featureブランチを選択
  3. 「OK」ボタンを押す
  4. 問題がなければ、featureブランチを削除(右クリック→削除)

→ これで開発が完了!


6.3 シンプルなブランチ管理のポイント

  1. 基本は「master」と「feature」だけ
    • 複雑なブランチ構成は不要
    • 1つの機能につき1つのfeatureブランチを作成
  2. こまめにプル&プッシュ
    • 作業開始前に プル
    • 作業完了後に プッシュ
  3. 不要なブランチは削除
    • マージが完了したら、featureブランチは削除して管理をシンプルにする

GitHubフローの基本を学ぶ練習問題

問題 1: トピックブランチを作成して作業する

目的: main ブランチを直接編集せずに、新しいトピックブランチを作成し、作業する方法を学ぶ。

手順:

  1. GitHubに新しいリポジトリを作成し、VS Codeでクローンする。
  2. ソース管理ビュー(Ctrl + Shift + G)を開く。
  3. 現在のブランチ名(通常は main)をクリック。
  4. 「新しいブランチを作成」ボタンをクリック。
  5. 新しいブランチ名(例: feature-branch)を入力し、作成。
  6. 作業用のファイル(例: feature.txt)を作成し、適当な内容を書く。
  7. ファイルをステージングし、コミットする。
  8. 「変更をプッシュ」ボタンをクリックし、GitHubへプッシュ。
  9. 完了したら、GitHub上で feature-branch が作成され、変更が反映されていることを確認する。
問題 2: プルリクエストを作成する

目的: トピックブランチの作業が完了したら、GitHub上でプルリクエストを作成する方法を学ぶ。

手順:

  1. GitHubのリポジトリページを開く。
  2. 「Pull requests」タブを開く。
  3. 「New pull request」ボタンをクリック。
  4. 比較対象を feature-branch(作業したブランチ)に変更。
  5. ベースブランチが main であることを確認。
  6. 「Create pull request」ボタンをクリック。
  7. タイトルと説明を記入し、「Create pull request」をクリック。
  8. 完了したら、プルリクエストが作成され、GitHub上でレビュー可能な状態になっていることを確認する。
問題 3: プルリクエストをマージし、ブランチを削除する

目的: プルリクエストをマージし、不要になったトピックブランチを整理する方法を学ぶ。

手順:

  1. GitHubのプルリクエストページを開く。
  2. 「Merge pull request」ボタンをクリック。
  3. 「Confirm merge」をクリック。
  4. 「Delete branch」ボタンが表示されるのでクリック。
  5. VS Codeでソース管理ビューを開く。
  6. 「...」(三点リーダー)をクリックし、「プル(fetch and pull)」を選択。
  7. ローカルの feature-branch も削除する。
  8. ブランチ名をクリックし、「ブランチを削除」を選択。
  9. main ブランチに戻り、最新の状態になっていることを確認。
  10. 完了したら、GitHub上で feature-branch が削除され、ローカルリポジトリも整理されていることを確認する。

これで、シンプルなブランチ構成での開発フローを学びました!
次の章では、Sourcetreeをもっと便利に使うためのテクニックを紹介します。

第7章:Sourcetreeをもっと便利に使う

7.1 コミットメッセージのルールを決めよう

Gitでは、変更内容をコミットメッセージに書くことで、どんな変更をしたのか記録できます。
適切なメッセージを書いておくと、後で履歴を確認するときにとても役立ちます。

良いコミットメッセージの例

✔ 短く、わかりやすく書く

  • 例:「ログイン画面のレイアウト修正」
  • 例:「ユーザープロフィールの編集機能を追加」

✔ 一貫したフォーマットを決める

  • [追加] 新しい機能を追加
  • [修正] バグ修正
  • [変更] コードのリファクタリング

→ ルールを決めておくと、チームでの作業もスムーズ!


7.2 変更を一時的に保存する(スタッシュ)

作業途中で「ちょっと別の作業をしたいけど、今の変更は後で使いたい…」ということはありませんか?
そんなときに使えるのがスタッシュ(stash)です。

Sourcetreeでスタッシュを使う

  1. 変更をコミットせずに、「作業ツリーのスタッシュ」ボタンをクリック
  2. スタッシュ名を入力(例:「途中の作業を保存」)し、OKを押す
  3. 作業が一時的に消える(元の状態に戻る)

スタッシュを戻す

  1. 「スタッシュ」タブを開く
  2. 戻したいスタッシュを右クリック → 適用

→ 一時的に保存しておいて、後で続きを作業できる!


7.3 過去のコミットを修正する

「あ、さっきのコミット、間違えた!」と思ったら、修正する方法があります。

直前のコミットを修正

  1. 「コミット」タブを開く
  2. 最新のコミットを右クリック → 「コミットを修正」
  3. 修正したい内容を追加し、再コミット

→ これなら、間違えたコミットメッセージやファイルの追加漏れを簡単に直せる!


7.4 変更を視覚的に確認する

Sourcetreeでは、変更内容を「視覚的に」確認できるので、履歴の追跡が簡単です。

変更履歴を確認

  1. 「コミット」タブを開く
  2. 過去のコミットをクリックすると、変更内容が表示される
  3. ファイルごとの変更点もチェック可能!

→ コードの変更履歴が見やすく、過去の修正をすぐに探せる!


これで、Sourcetreeをもっと便利に使うためのテクニックを学びました!
次の章では、よくあるエラーメッセージとその対処法を紹介します。

第8章:よくあるエラーメッセージとその対処法

GitやSourcetreeを使っていると、時々エラーメッセージが表示されることがあります。
ここでは、初心者が遭遇しやすいエラーとその解決方法を紹介します。


8.1 「このブランチはリモートに追跡されていません」

エラーの意味

新しく作成したブランチをリモートリポジトリにプッシュしようとすると、次のようなメッセージが出ることがあります。

このブランチはリモートに追跡されていません。

解決方法

  1. 「プッシュ」ボタンをクリック
  2. 「リモートブランチを作成」にチェックを入れる
  3. 「OK」を押してプッシュする

→ これで、リモートリポジトリに新しいブランチが作成される!


8.2 「Your branch is ahead of ‘origin/master’」

エラーの意味

「ローカルのブランチがリモートより進んでいる」という警告です。
つまり、自分の変更をプッシュしないと、リモートと同期が取れない状態です。

Your branch is ahead of ‘origin/master’ by X commits.

解決方法

  1. 「プッシュ」ボタンをクリックして、変更をリモートに送信する
  2. それでも解決しない場合は、最新の変更を取得するために「プル」してからプッシュ

8.3 「コンフリクトが発生しました」

エラーの意味

リモートリポジトリとローカルのブランチで、同じファイルを異なる内容に変更していた場合に発生します。

CONFLICT (content): Merge conflict in [ファイル名]

解決方法

  1. Sourcetreeの「マージ」タブを開く
  2. コンフリクトが発生しているファイルをダブルクリック
  3. エディタで開き、どの変更を残すか決めて手動で修正
  4. 修正したら「ステージング」に追加して、コミット

→ コンフリクトを解決するには、どの変更を残すかを手動で決めることが必要!


8.4 「Permission denied (publickey)」

エラーの意味

リモートリポジトリにプッシュしようとしたとき、SSHキーが正しく設定されていない場合に発生します。

Permission denied (publickey).

解決方法

  1. SSHキーを作成する
    • Windowsなら「Git Bash」、Macなら「ターミナル」を開き、次のコマンドを入力:ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    • 作成された「id_rsa.pub」をコピーし、リモートリポジトリ(GitHubなど)に登録
  2. Sourcetreeの設定を確認
    • 「ツール」→「オプション」→「認証」タブを開く
    • SSHキーが設定されているか確認する

→ リモートリポジトリへのアクセスには、正しいSSHキーを設定することが重要!


8.5 「fatal: refusing to merge unrelated histories」

エラーの意味

別の履歴を持つリポジトリ同士をマージしようとすると発生します。

fatal: refusing to merge unrelated histories

解決方法

  1. コマンドラインを開く(Sourcetreeの「ターミナル」ボタンを押す)
  2. 以下のコマンドを入力:git pull origin master--allow-unrelated-histories
  3. その後、Sourcetreeで「プル」を実行

→ 異なる履歴を持つリポジトリ同士を統合する場合は、オプションを指定する!


これで、よくあるエラーメッセージとその解決方法を学びました!
次の章では、よくあるユースケースについて紹介します。

以下の内容を追加します。


8.6 「error: cannot delete branch」

error: cannot delete branch

エラーの意味
このエラーは、削除しようとしたブランチが現在チェックアウトされているか、リモートブランチとして存在している場合に発生します。

解決方法

  1. 削除対象のブランチから離れる
    • Sourcetreeで「ブランチ」タブを開き、masterや develop など他のブランチに切り替えてから、削除を試みてください。
  2. ローカルブランチを削除する(ターミナル使用)
    • Sourcetreeの「ターミナル」ボタンを押し、以下のコマンドを実行: git branch -d ブランチ名
    • -d(小文字)はマージ済みのブランチを削除できます。
    • -D(大文字)を使うと、未マージのブランチも強制削除できます。 git branch -D ブランチ名
  3. リモートブランチを削除する
    • リモートブランチを削除するには、以下のコマンドを実行: git push origin --delete ブランチ名

→ チェックアウトしていないことを確認し、適切なコマンドで削除する!

第9章:よくあるユースケースとSourcetreeの活用方法

Sourcetreeを使うと、Gitの操作を視覚的に管理できるため、さまざまなシーンで役立ちます。
ここでは、初心者がよく直面するユースケースを取り上げ、その解決方法を紹介します。

ユースケース1:ローカルリポジトリでGitを使い始める


あなたは、新しいプロジェクトを開始するために、Sourcetreeでローカルリポジトリを作成し、ファイルを管理できるようにしたいと考えています。

このユースケースでは、次の手順を実行します。

  1. Sourcetreeでローカルリポジトリを作成
  2. ファイルを追加してコミット
  3. 変更履歴を確認
  4. 不要な変更を元に戻す

① Sourcetreeでローカルリポジトリを作成

Sourcetreeを使って、Gitの管理対象となる新しいプロジェクトフォルダを作成します。

手順

  1. Sourcetreeを開く
  2. 「+ 新しいリポジトリ」ボタンをクリック
  3. 「ローカルリポジトリを作成」タブを選択
  4. フォルダの場所を指定(例:C:\Users\ユーザー名\Documents\MyProject)
  5. リポジトリ名を入力(例:「MyProject」)
  6. 「作成」ボタンを押す

→ 指定したフォルダがGitの管理対象になり、ローカルリポジトリが作成されました!


② ファイルを追加してコミット

リポジトリを作成したら、ファイルを追加してGitに記録(コミット)します。

手順

  1. 作成した「MyProject」フォルダを開く
  2. 「README.md」ファイルを新規作成
    • 中身に「# MyProject」と記述
  3. Sourcetreeを開き、「作業ツリーの変更」タブをクリック
  4. 変更したファイル(README.md)を選択し、「ステージング」に追加
  5. コミットメッセージを入力(例:「最初のREADMEを追加」)
  6. 「コミット」ボタンをクリック

→ これでGitに変更が記録されました!


③ 変更履歴を確認する

コミットした変更の履歴を確認してみましょう。

手順

  1. Sourcetreeの「コミット」タブを開く
  2. 最新のコミットをクリック
  3. 変更内容が表示される(どのファイルがどのように変更されたか確認可能)

→ 履歴を確認することで、過去の作業を簡単に追跡できます!


④ 不要な変更を元に戻す(作業ツリーの破棄)

間違えて変更した場合、変更を取り消して元の状態に戻すことができます。

手順

  1. Sourcetreeの「作業ツリーの変更」タブを開く
  2. 取り消したいファイルを右クリック
  3. 「作業ツリーの破棄」を選択
  4. 確認メッセージが表示されるので、「OK」を押す

→ ファイルの変更が取り消され、最後のコミットの状態に戻りました!


まとめ

このユースケースでは、Sourcetreeを使ってローカルリポジトリを作成し、ファイルの管理を開始する方法を学びました。

✔ ローカルリポジトリを作成する
✔ ファイルを追加してコミットする
✔ 変更履歴を確認する
✔ 不要な変更を元に戻す(作業ツリーの破棄)

→ これで、Gitを使ってローカル環境でのバージョン管理ができるようになりました!


ユースケース2:特定の変更を取り消す(直前のコミット修正、リセット、リバート)


あなたはSourcetreeを使って作業を進めているときに、間違った内容でコミットしてしまったことに気づきました。
または、コミットせずに変更していたファイルを元に戻したいと思いました。

このユースケースでは、次のような場面に対応する方法を学びます。

  1. 直前のコミットを修正する
  2. コミットを取り消す(リセット)
  3. 過去のコミットを取り消す(リバート)
  4. 未コミットの変更を元に戻す(作業ツリーの破棄)

① 直前のコミットを修正する(コミットの上書き)

「コミットした後に、ファイルを追加し忘れた!」という場合、直前のコミットを修正できます。

手順

  1. Sourcetreeの「コミット」タブを開く
  2. 最新のコミットを右クリックし、「コミットを修正」を選択
  3. 追加したいファイルをステージングに追加
  4. 必要ならコミットメッセージを修正
  5. 「コミット」ボタンを押す

→ これで、直前のコミットを修正できました!

⚠ 注意:

  • 修正したコミットをリモートリポジトリにプッシュする前なら安全に使える
  • すでにプッシュ済みの場合は、履歴が書き換わるため注意!

② コミットを取り消す(リセット)

「このコミット自体が不要だった…」という場合、リセットを使います。

リセットの種類

リセットの種類説明
ソフトリセットコミットを取り消すが、ファイルの変更は残す
ミックスリセットコミットとステージングを取り消し、作業ツリーの変更は残す
ハードリセットコミットも作業ツリーの変更も完全に削除(注意!)

Sourcetreeでリセットを実行する

  1. 「コミット」タブを開く
  2. 取り消したいコミットを右クリック
  3. 「このコミットまでリセット」→ 適切なリセット方法を選択
  4. 「OK」をクリック

→ リセット完了!

⚠ 注意:

  • 「ハードリセット」は、元に戻せないため慎重に!
  • すでにプッシュ済みのコミットをリセットすると、他の人に影響が出る

③ 過去のコミットを取り消す(リバート)

「以前のコミットの変更を取り消したいけど、履歴は残したい」という場合、リバートを使います。

Sourcetreeでリバートを実行する

  1. 「コミット」タブを開く
  2. 取り消したいコミットを右クリック
  3. 「このコミットをリバート」ボタンをクリック
  4. 新しいコミットが作成され、変更が取り消される

→ リバートなら、履歴を壊さずに変更を取り消せる!

⚠ リバートが適しているケース:

  • すでにプッシュしたコミットを取り消したいとき
  • 履歴を残しつつ、誤った変更を元に戻したいとき

④ 未コミットの変更を元に戻す(作業ツリーの破棄)

「まだコミットしていない変更を元に戻したい!」という場合、作業ツリーの破棄を使います。

Sourcetreeで作業ツリーを破棄する

  1. 「作業ツリーの変更」タブを開く
  2. 破棄したいファイルを右クリック
  3. 「作業ツリーの破棄」を選択
  4. 確認メッセージが出るので、「OK」をクリック

→ これで、ファイルが最後のコミットの状態に戻りました!

⚠ 注意:

  • この操作は元に戻せないため慎重に!
  • コミットしていない変更が完全に消える

まとめ

このユースケースでは、特定の変更を取り消す方法を学びました。

✔ 直前のコミットを修正する(コミットの上書き)
✔ コミットを取り消す(リセット)
✔ 過去のコミットを取り消す(リバート)
✔ 未コミットの変更を元に戻す(作業ツリーの破棄)

→ 状況に応じて適切な方法を選べるようになれば、Gitをより安心して使えます!

ユースケース3:コンフリクトを解決する(競合したときの対処法)


シナリオ

あなたはチーム開発を行っており、リモートリポジトリの最新の変更を取得しようとしました。
しかし、プル(pull)した際に「コンフリクト(競合)」が発生し、Gitがどの変更を採用すべきか判断できなくなりました。

このユースケースでは、Sourcetreeを使ってコンフリクトを解決する方法を学びます。


① コンフリクトとは?

コンフリクト(競合)とは、同じファイルの同じ部分を、異なるブランチで編集したときに発生する問題です。
Gitはどちらの変更を採用すべきか判断できないため、手動で修正する必要があります。


② コンフリクトの発生例

以下のような状況でコンフリクトが発生します。

  1. Aさんが masterブランチで index.html を編集し、リモートにプッシュ
  2. あなたも index.html を編集し、ローカルでコミット
  3. あなたがプル(pull)すると、「競合(コンフリクト)」が発生!
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

③ コンフリクトが発生したら?

Sourcetreeでは、競合が発生したファイルが「マージ」タブに表示されるので、手動で解決できます。

コンフリクトを解決する手順

  1. Sourcetreeの「マージ」タブを開く
  2. 競合が発生したファイル(例:index.html)をダブルクリック
  3. テキストエディタで開き、どの変更を残すか決めて修正
  4. 修正が完了したら、ファイルを「ステージング」に追加
  5. コンフリクト解決のコミットを作成
  6. リモートにプッシュ(push)する

→ コンフリクトが解決し、マージが完了しました!


④ コンフリクト発生時のファイルの見方

コンフリクトが発生したファイルを開くと、次のようなマークが表示されます。

<<<<<<< HEAD
あなたがローカルで編集した内容
=======
リモートにある別の変更内容
>>>>>>> origin/master

これを手動で修正!

  1. どの変更を採用するか決める
  2. 不要な <<<<<<<, =======, >>>>>>> を削除
  3. 修正後に保存し、ステージング&コミット

⑤ コンフリクトを防ぐためのポイント

  • こまめにプル(pull)して、リモートと同期する
  • ブランチを活用して、作業を分ける
  • チーム内で、誰がどのファイルを編集しているか把握する

まとめ

このユースケースでは、コンフリクト(競合)の解決方法を学びました。

✔ コンフリクトが発生する原因を理解する
✔ Sourcetreeで競合ファイルを確認する
✔ 手動で変更を修正し、ステージング&コミット
✔ リモートにプッシュして、コンフリクトを解消する

→ コンフリクトの仕組みを理解していれば、チーム開発でもスムーズに対応できます!

ユースケース4:過去の特定の変更を別のブランチに適用する(チェリーピック)


シナリオ

あなたは開発を進めている途中で、過去のあるコミットの変更だけを、現在のブランチに適用したいと考えています。
このとき、チェリーピック(cherry-pick) を使うことで、特定のコミットを別のブランチに取り込むことができます。

このユースケースでは、Sourcetreeを使ってチェリーピックを行う方法を学びます。


① チェリーピックとは?

チェリーピック(cherry-pick)とは、過去の特定のコミットだけを、現在のブランチに適用する操作です。

例えば、次のような状況を考えます。

  1. 「feature-login」ブランチで「ログイン画面のデザイン修正」をコミット
  2. 「master」ブランチにも、この修正だけを適用したい
  3. ただし、「feature-login」の他の変更は取り込みたくない

この場合、チェリーピックを使えば、「ログイン画面のデザイン修正」コミットのみを masterに適用できる!


② 過去のコミットをチェリーピックする手順

Sourcetreeを使うと、視覚的に簡単にチェリーピックできます。

手順

  1. Sourcetreeを開き、「コミット」タブを選択
  2. チェリーピックしたいコミットを探す
    • 例:「ログイン画面のデザイン修正」コミット
  3. 対象のコミットを右クリックし、「このコミットをチェリーピック」を選択
  4. チェリーピックを適用するブランチを確認
    • 例:「master」ブランチでチェリーピックする場合は、master に切り替えておく
  5. 「OK」をクリックし、変更を適用
  6. 適用後、コミットを確認し、必要ならプッシュ(push)する

→ これで、指定したコミットの変更内容だけを、別のブランチに適用できました!


③ チェリーピックのメリット

  • 過去の特定の修正を、他のブランチに反映できる
  • マージせずに、一部の変更だけ取り込める
  • 余計な変更を含めずに、必要な修正だけを適用できる

④ チェリーピックを活用するケース

✅ 1つの機能だけを他のブランチに適用したい

  • 例:「ログイン機能のバグ修正」だけを、すぐに本番環境(master)に反映したい

✅ 複数のブランチで共通の修正を適用したい

  • 例:「エラーメッセージの文言修正」を、すべての開発ブランチに適用したい

⑤ チェリーピック時の注意点

  • 競合(コンフリクト)が発生する可能性がある
    • 適用先のブランチに、すでに別の変更が入っている場合、手動で修正が必要になる
  • あまり多用しすぎると、履歴が複雑になる
    • 「本当にチェリーピックが必要か?」を考えて使う
    • 大規模な修正なら、マージ(merge)の方が適している場合もある

まとめ

このユースケースでは、過去の特定の変更を、別のブランチに適用する方法(チェリーピック) を学びました。

✔ チェリーピックとは、特定のコミットだけを適用する操作
✔ Sourcetreeでは、コミットを右クリックするだけでチェリーピックできる
✔ 一部の修正だけを反映したいときに便利!
✔ 競合(コンフリクト)には注意が必要

→ 適切にチェリーピックを使えば、開発の柔軟性がアップします!