1.

Git 入門 — 分散バージョン管理システムの概要・基本ワークフロー・ブランチ戦略

編集
この記事の要点
  • Git は Linus Torvalds が 2005 年に作った分散型バージョン管理システム (DVCS)。Linux カーネル開発のために生まれた
  • 基本ワークフロー: add → commit → push。各開発者が完全な履歴のローカルコピーを持つ
  • 主要概念: リポジトリ / ブランチ / コミット / リモート / マージ / リベース
  • 主要ホスティングサービス: GitHub / GitLab / Bitbucket。Pull Request 文化と CI/CD 連携が標準
  • ブランチ戦略: GitHub Flow(シンプル、main + feature)/ Git Flow(develop / release / hotfix を持つ)

Git とは

Git は、ソースコードの変更履歴を記録・追跡する分散型バージョン管理システム (Distributed Version Control System) です。2005 年、Linux カーネル開発のために Linus Torvalds が作成しました。

従来の集中型 VCS(Subversion 等)と異なり、各開発者のローカルに完全な履歴のコピーが存在します。オフラインでもコミット可能で、サーバー障害時も作業を継続できます。

集中型 VCS との違い

項目集中型 (SVN/CVS)分散型 (Git/Mercurial)
履歴の場所中央サーバーのみ各開発者のローカル + リモート
オフライン作業コミット不可完全に可能
ブランチ高コスト(コピー)軽量(ポインタのみ)
マージ難しい高度なマージ機能
速度ネットワーク依存ローカル操作は高速

インストールと初期設定

# macOS
brew install git
# または Xcode Command Line Tools に同梱
xcode-select --install

# Ubuntu / Debian
sudo apt install -y git

# Windows
# https://git-scm.com/download/win から Git for Windows をインストール

# バージョン確認
git --version
# git version 2.43.x

# 初回セットアップ(必須)
git config --global user.name "Your Name"
git config --global user.email "you@example.com"

# 既定エディタ
git config --global core.editor "code --wait"

# 既定ブランチ名(GitHub に合わせて main)
git config --global init.defaultBranch main

# 設定確認
git config --list

基本ワークフロー

# 1. リポジトリを作成
git init my-project
cd my-project

# 2. ファイルを作成
echo "# My Project" > README.md

# 3. ステージング(add)
git add README.md
git add .                # 全変更を追加

# 4. コミット(commit)
git commit -m "Initial commit"

# 5. リモートを追加
git remote add origin https://github.com/user/my-project.git

# 6. プッシュ(push)
git push -u origin main

# 既存リポジトリをクローン
git clone https://github.com/user/repo.git
cd repo

# 状態確認
git status

# 変更差分確認
git diff
git diff --staged

# ログ確認
git log --oneline --graph --all

ブランチと統合

# ブランチ作成・切替
git branch feature/login          # 作成のみ
git checkout feature/login        # 切替(旧コマンド)
git switch feature/login          # 切替(推奨、Git 2.23+)
git checkout -b feature/login     # 作成 + 切替
git switch -c feature/login       # 作成 + 切替(推奨)

# ブランチ一覧
git branch                # ローカル
git branch -a             # リモート含む

# マージ
git switch main
git merge feature/login           # マージコミット作成
git merge --no-ff feature/login   # 必ずマージコミット作成
git merge --squash feature/login  # 1 コミットに統合

# リベース(履歴を直線化)
git switch feature/login
git rebase main

# ブランチ削除
git branch -d feature/login       # マージ済のみ削除
git branch -D feature/login       # 強制削除

# リモートブランチ削除
git push origin --delete feature/login

.gitignore

追跡しないファイルのパターンを記述します:

# 依存ディレクトリ
node_modules/
vendor/
__pycache__/

# ビルド成果物
dist/
build/
*.o
*.class

# IDE / エディタ
.idea/
.vscode/
*.swp
.DS_Store

# 環境変数(重要!)
.env
.env.local
*.key
*.pem

# ログ
*.log
logs/

# OS
Thumbs.db
desktop.ini

リモートホスティングサービス

サービス運営特徴
GitHubMicrosoft世界最大、OSS 中心、Actions(CI/CD)、Copilot
GitLabGitLab Inc.セルフホスト可、内蔵 CI/CD、企業利用多い
BitbucketAtlassianJira / Confluence 連携、無料プライベートリポジトリ
Azure DevOpsMicrosoftエンタープライズ、Azure 統合

SSH 鍵セットアップ

# Ed25519 鍵を生成(推奨)
ssh-keygen -t ed25519 -C "you@example.com"

# 公開鍵を表示してコピー
cat ~/.ssh/id_ed25519.pub

# GitHub に登録: Settings → SSH and GPG keys → New SSH key
# にペーストして保存

# 接続テスト
ssh -T git@github.com
# Hi username! You've successfully authenticated...

# リモートを SSH に変更
git remote set-url origin git@github.com:user/repo.git

ブランチ戦略

  • GitHub Flow: main + feature/* のみ。シンプル、Web サービス向け。PR でレビュー → main マージ → 即デプロイ
  • Git Flow: main / develop / feature/* / release/* / hotfix/*。複雑だがリリースサイクルの厳格な製品向け
  • Trunk Based Development: main に直接コミット。短命ブランチ。CI/CD 必須

Pull Request 文化と CI/CD

現代の開発では feature ブランチで作業 → Pull Request (Merge Request) を作成 → コードレビュー → CI(自動テスト)緑 → マージという流れが標準です。

# GitHub Actions の例 (.github/workflows/ci.yml)
name: CI
on:
  pull_request:
    branches: [main]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: shivammathur/setup-php@v2
        with:
          php-version: '8.3'
      - run: composer install --no-progress
      - run: vendor/bin/phpunit
      - run: vendor/bin/phpstan analyse

FAQ

Q: Git と GitHub の違いは?
A: Git はバージョン管理ツール(ソフトウェア)、GitHub は Git リポジトリのホスティングサービス(Web サイト)です。GitHub なしでも Git は使えます。

Q: merge と rebase どちらを使うべき?
A: チームの方針次第。履歴を綺麗に保ちたいなら rebase、マージの事実を残したいなら merge。push 済みコミットの rebase は禁止

Q: 間違ったコミットを取り消したい
A: 未 push なら git reset --soft HEAD~1、push 済なら git revert で打ち消しコミットを作成。

Q: 大きなファイル(動画 / バイナリ)を扱いたい
A: Git LFS(Large File Storage)を使う。git lfs installgit lfs track "*.psd"

編集
Post Share
子ページ
  1. 用語一覧
  2. エラー一覧
  3. git本体のインストール(Linux)
  4. Linuxサーバーへのgit導入とクライアントのセットアップ
  5. リモートリポジトリをローカルリポジトリとしてクローンする方法
  6. リモートとローカルのリポジトリを同期(pull)する方法
  7. 設定の確認
  8. gitユーザー名とemailの設定
  9. リモートリポジトリの作成
  10. ローカルリポジトリの作成
  11. 新規ファイル/ディレクトリをインデックスに登録
  12. インデックスの登録状態を確認
  13. ローカルリポジトリの変更をコミット
  14. コミット履歴の確認
  15. クライアントからリモートリポジトリの接続設定、確認、削除
  16. リポジトリへのプッシュ
  17. リモートリポジトリからクライアントへのSSHクローン
  18. リモートとローカルの差分表示
  19. バージョンの確認
  20. プロキシの設定
  21. ローカルをリモートリポジトリの状態に戻す
  22. ブランチの作成, 一覧表示, 切り替え
  23. ブランチのマージと削除
  24. リベース
  25. .gitignoreの書き方
  26. .gitignoreの設定が反映されない場合
  27. 特定のファイルをgitの管理から外す方法
  28. 参照(ORIG_HEAD, HEAD, FETCH_HEAD)
  29. git rm [-r --cached] の取り消し
  30. 一部のディレクトリ/ファイルのみをリポジトリから復元する方法
  31. ローカルとリモートリポジトリの有無を同期
  32. pushの取消し方法
  33. マージツールの起動方法
  34. Gitで「MERGING」の状態a
同階層のページ
  1. git
  2. Sourcetree