はじめに
この章では、Gitの基本的な操作を実際に手を動かしながら学習します。 リポジトリの作成から始まり、日常的な開発で必要となるコミット、ブランチ、プッシュなどの操作を 段階的にマスターしていきます。
各セクションには実践演習が含まれています。必ず手を動かして確認しながら進めてください。エラーが発生しても慌てずに、エラーメッセージを読んで対処法を学びましょう。
2.1 リポジトリの作成と管理
ローカルリポジトリの作成
まず、新しいプロジェクトのためのローカルリポジトリを作成します:
# 新しいディレクトリを作成
mkdir my-first-project
cd my-first-project
# Gitリポジトリとして初期化
git init
# 初期化の確認
ls -la
# .gitディレクトリが作成されていることを確認
git init
を実行すると、そのディレクトリがGitリポジトリになります。既存のプロジェクトをGit管理下に置く場合も、同じコマンドを使用します。
既存のリポジトリをクローン
GitHubから既存のリポジトリをクローンする方法:
# HTTPSでクローン
git clone https://github.com/username/repository-name.git
# SSHでクローン(推奨)
git clone git@github.com:username/repository-name.git
# 特定のディレクトリ名でクローン
git clone git@github.com:username/repository-name.git my-custom-name
# 特定のブランチをクローン
git clone -b branch-name git@github.com:username/repository-name.git
リポジトリの状態確認
リポジトリの現在の状態を確認する最も重要なコマンド:
# 現在の状態を確認
git status
# 短縮形式で表示
git status -s
# ブランチ情報も含めて表示
git status -sb
実践演習 2.1
以下の手順を実行してください:
- 新しいディレクトリ「practice-git」を作成
- そのディレクトリでGitリポジトリを初期化
README.md
ファイルを作成(内容は「# My Practice Repository」)git status
で状態を確認
2.2 コミットの作成と管理
ステージングとコミットの基本
Gitでは変更を記録する前に、まずステージングエリアに追加する必要があります:
# ファイルをステージングエリアに追加
git add filename.txt
# 複数ファイルを追加
git add file1.txt file2.txt
# 全ての変更をステージング
git add .
# 特定の拡張子のファイルのみ追加
git add *.js
# インタラクティブモードで追加
git add -i
コミットの作成
ステージングエリアの変更をコミットとして記録:
# コミットメッセージを指定してコミット
git commit -m "Add initial README file"
# エディタを開いて詳細なメッセージを記述
git commit
# ステージングとコミットを同時に実行(追跡済みファイルのみ)
git commit -am "Update README with project description"
# 空のコミットを作成(CI/CDのトリガーなどに使用)
git commit --allow-empty -m "Trigger CI build"
良いコミットメッセージの書き方
- 1行目: 50文字以内で変更の要約
- 2行目: 空行
- 3行目以降: 必要に応じて詳細な説明(72文字で折り返し)
# 良い例
feat: ユーザー認証機能を追加
JWTトークンを使用した認証システムを実装。
- ログイン/ログアウト機能
- トークンの自動更新
- セッション管理
Closes #123
# 悪い例
修正
更新しました
いろいろ変更
コミットの修正
直前のコミットを修正する方法:
# 直前のコミットメッセージを修正
git commit --amend -m "新しいコミットメッセージ"
# ファイルを追加して直前のコミットに含める
git add forgotten-file.txt
git commit --amend --no-edit
# コミットの作者情報を修正
git commit --amend --author="Name "
--amend
は履歴を書き換えるため、既にプッシュしたコミットには使用しないでください。チーム開発では混乱の原因となります。
コミット履歴の確認
# 基本的なログ表示
git log
# 1行形式で表示
git log --oneline
# グラフ形式で表示
git log --graph --oneline --all
# 特定の期間のコミットを表示
git log --since="2024-01-01" --until="2024-01-31"
# 特定の作者のコミットを表示
git log --author="John Doe"
# ファイルの変更履歴を表示
git log -p filename.txt
# 統計情報付きで表示
git log --stat
実践演習 2.2
前の演習で作成したリポジトリで以下を実行:
index.html
ファイルを作成(簡単なHTMLテンプレート)- README.mdに説明を追加
- それぞれを別々のコミットとして記録
- コミット履歴を確認し、適切なメッセージが付いているか確認
- 最後のコミットメッセージを修正
2.3 ブランチの概念と操作
ブランチとは
ブランチは開発の流れを分岐させる仕組みです。 メインの開発ラインに影響を与えずに、新機能の開発や実験的な変更を行うことができます。
main ●───●───●───●───● ╲ ╱ feature ●───●───● ● = コミット ─ = 履歴の流れ ╲╱ = ブランチの分岐/マージ
ブランチの作成と切り替え
# 現在のブランチを確認
git branch
# 新しいブランチを作成
git branch feature-login
# ブランチを切り替え
git checkout feature-login
# ブランチの作成と切り替えを同時に実行
git checkout -b feature-user-profile
# 新しい方法(Git 2.23以降)
git switch feature-login
git switch -c feature-new-feature # 作成と切り替え
# リモートブランチを元に新しいブランチを作成
git checkout -b feature-x origin/feature-x
ブランチの管理
# 全てのブランチを表示(リモート含む)
git branch -a
# リモートブランチのみ表示
git branch -r
# ブランチを削除
git branch -d feature-completed
# マージされていないブランチを強制削除
git branch -D feature-abandoned
# ブランチ名を変更
git branch -m old-name new-name
# 現在のブランチ名を変更
git branch -m new-name
ブランチ戦略の基礎
効果的なブランチ運用のための基本的な戦略:
Feature Branch(フィーチャーブランチ)
各機能ごとにブランチを作成し、完成後にメインブランチにマージ
feature/user-authentication
Bugfix Branch(バグ修正ブランチ)
バグ修正専用のブランチ
bugfix/login-error
Hotfix Branch(緊急修正ブランチ)
本番環境の緊急修正用
hotfix/security-patch
ブランチ間の差分確認
# 2つのブランチ間の差分を表示
git diff main..feature-branch
# 特定のファイルの差分のみ表示
git diff main..feature-branch -- path/to/file.js
# コミットの差分を表示
git log main..feature-branch
# 視覚的に差分を確認
git log --graph --oneline main feature-branch
実践演習 2.3
ブランチ操作の練習:
feature/navbar
ブランチを作成- そのブランチで
navbar.html
を作成してコミット feature/footer
ブランチを作成(mainから)- そのブランチで
footer.html
を作成してコミット - 各ブランチの内容を確認し、独立していることを確認
2.4 リモートリポジトリとの連携
リモートリポジトリの設定
ローカルリポジトリをGitHubなどのリモートリポジトリと連携させます:
# リモートリポジトリを追加
git remote add origin git@github.com:username/repository.git
# リモートリポジトリの一覧を表示
git remote -v
# リモートリポジトリの詳細情報を表示
git remote show origin
# リモートリポジトリのURLを変更
git remote set-url origin git@github.com:username/new-repository.git
# リモートリポジトリを削除
git remote remove origin
# 複数のリモートリポジトリを管理
git remote add upstream git@github.com:original/repository.git
プッシュ操作
ローカルの変更をリモートリポジトリに送信:
# 現在のブランチをプッシュ
git push
# 初回プッシュ時(上流ブランチの設定)
git push -u origin main
# 特定のブランチをプッシュ
git push origin feature-branch
# 全てのブランチをプッシュ
git push --all
# タグをプッシュ
git push --tags
# 強制プッシュ(危険!)
git push --force
# より安全な強制プッシュ
git push --force-with-lease
--force
は履歴を上書きするため、他の開発者の作業を失う可能性があります。--force-with-lease
は他者の変更がある場合は失敗するため、より安全です。
プル操作
リモートリポジトリから変更を取得:
# リモートの変更を取得してマージ
git pull
# 特定のリモート・ブランチから取得
git pull origin main
# リベースモードでプル
git pull --rebase
# フェッチのみ実行(マージしない)
git fetch
# 全てのリモートから取得
git fetch --all
# 削除されたリモートブランチの参照を削除
git fetch --prune
プルとフェッチの違い
git fetch
- リモートの変更を取得のみ
- ローカルブランチは変更されない
- 安全に最新情報を確認できる
- マージのタイミングを制御可能
git pull
fetch
+merge
を実行- ローカルブランチが更新される
- コンフリクトが発生する可能性
- 即座に最新状態になる
リモートブランチの追跡
# ローカルブランチにリモートブランチを設定
git branch --set-upstream-to=origin/main main
# 短縮形
git branch -u origin/main
# 追跡情報を確認
git branch -vv
# リモートブランチを元に新しいブランチを作成(自動追跡)
git checkout --track origin/feature-x
実践演習 2.4
GitHubでリポジトリを作成し、ローカルと連携:
- GitHubで新しいリポジトリを作成(READMEなし)
- ローカルリポジトリにリモートとして追加
- これまでの作業をプッシュ
- GitHub上で確認
- READMEをGitHub上で編集し、ローカルにプル
2.5 基本的なトラブルシューティング
よくあるエラーと対処法
コンフリクトが発生した場合
# コンフリクトの確認
git status
# コンフリクトしているファイルを編集
# <<<<<<< HEAD
# 自分の変更
# =======
# 他者の変更
# >>>>>>> branch-name
# 解決後、ファイルをステージング
git add resolved-file.txt
# コミットして完了
git commit -m "Resolve merge conflict"
間違ってコミットした場合
# 直前のコミットを取り消し(変更は残る)
git reset --soft HEAD~1
# 直前のコミットを完全に取り消し(変更も削除)
git reset --hard HEAD~1
# 特定のファイルのみステージングから除外
git reset HEAD file.txt
# 特定のコミットまで戻る
git reset --hard abc1234
変更を一時的に退避させたい場合
# 現在の変更を一時退避
git stash
# メッセージ付きで退避
git stash save "作業中のログイン機能"
# 退避リストを表示
git stash list
# 最新の退避を適用
git stash pop
# 特定の退避を適用(削除しない)
git stash apply stash@{1}
# 退避を削除
git stash drop stash@{0}
作業の取り消し
# 特定のファイルの変更を取り消し
git checkout -- file.txt
# 全ての変更を取り消し(危険!)
git checkout -- .
# 新しい方法(Git 2.23以降)
git restore file.txt
# ステージングから除外
git restore --staged file.txt
# 追跡されていないファイルを削除
git clean -n # ドライラン
git clean -f # 実行
git clean -fd # ディレクトリも含めて削除
便利な設定とエイリアス
# よく使うコマンドのエイリアスを設定
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.unstage 'reset HEAD --'
# ログ表示のエイリアス
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
# 設定の確認
git config --global --list
実践演習 2.5
トラブルシューティングの練習:
- 意図的にコンフリクトを発生させて解決
- コミットを取り消して再度コミット
- stashを使って作業を一時退避・復元
- 便利なエイリアスを3つ以上設定
2.6 まとめと次のステップ
この章で学んだこと
- リポジトリの作成とクローン
- ステージング、コミット、履歴の確認
- ブランチの作成と管理
- リモートリポジトリとの連携(プッシュ/プル)
- 基本的なトラブルシューティング
コマンドクイックリファレンス
基本操作
git init
git status
git add .
git commit -m "message"
ブランチ操作
git branch
git checkout -b branch-name
git merge branch-name
git branch -d branch-name
リモート操作
git remote add origin URL
git push -u origin main
git pull
git fetch
理解度チェック
確認問題
git add
とgit commit
の役割の違いを説明してください- ブランチを使う利点を3つ挙げてください
git pull
とgit fetch
の違いは何ですか?- コンフリクトはなぜ発生し、どのように解決しますか?
git stash
はどのような場面で使用しますか?
次章への準備
第3章では、GitHubの核心的な機能であるプルリクエストとマージ戦略について学びます。 チーム開発において最も重要な概念の一つですので、以下の準備をしておきましょう:
- GitHubアカウントが有効であることを確認
- 練習用のリポジトリがGitHubにプッシュされていること
- 基本的なブランチ操作に慣れていること