この用語をシェア
概要
Gitは分散バージョン管理システムで、ソースコードの変更履歴を追跡・管理し、複数の開発者が同時に作業できる環境を提供します。2005年にLinux Torvalds氏によって開発され、現在最も広く使用されているバージョン管理システムです。
仕組み
Gitは各ファイルの「差分」ではなく、コミットごとにプロジェクト全体の「スナップショット」を記録するという点で、他の多くのバージョン管理システムと考え方が異なります。変更がないファイルは前のコミットへの参照として扱われるため、効率的にスナップショットを保持できます。
すべてのコミット、ファイル内容、ディレクトリ構造はSHA-1(新しいリポジトリではSHA-256への移行も進行中)のハッシュ値によって識別される「コンテンツアドレス方式」のオブジェクトとして.gitディレクトリ内に保存されます。コミットは親コミットへのポインタを持つため、リポジトリ全体は有向非巡回グラフ(DAG)の構造を取り、これがブランチやマージの仕組みの土台になっています。内容が1バイトでも変わればハッシュ値も変わるため、データの改ざんや破損を検知しやすい設計です。
主要概念
基本要素
- リポジトリ: プロジェクトの全履歴を保存する場所
- コミット: 変更内容のスナップショット
- ブランチ: 独立した開発ライン
- マージ: 複数のブランチを統合する作業
- ワーキングディレクトリ: 実際に作業を行う場所
- ステージングエリア: コミット前の変更を準備する場所
分散型の特徴
- ローカルリポジトリ: 各開発者のマシンに完全なコピー
- リモートリポジトリ: 共有用の中央リポジトリ
- オフライン作業: ネットワークなしでもバージョン管理が可能
- 高い可用性: 単一障害点がない
基本的なGitコマンド
初期設定
# グローバル設定
git config --global user.name "野口真一"
git config --global user.email "shinichi@noguchi.jp.net"
# リポジトリの初期化
git init
# 既存リポジトリのクローン
git clone https://github.com/username/repository.git
基本的な操作
# ファイルの状態確認
git status
# 変更をステージングエリアに追加
git add ファイル名
git add . # 全ての変更を追加
# コミットの作成
git commit -m "変更内容の説明"
# 変更履歴の確認
git log
git log --oneline # 簡潔な表示
# ファイルの差分確認
git diff
git diff --staged # ステージングエリアの差分
ブランチ操作
# ブランチの一覧表示
git branch
# 新しいブランチの作成
git branch feature/new-feature
# ブランチの切り替え
git checkout feature/new-feature
# ブランチの作成と切り替えを同時に
git checkout -b feature/new-feature
# ブランチのマージ
git checkout main
git merge feature/new-feature
# ブランチの削除
git branch -d feature/new-feature
リモートリポジトリ操作
# リモートリポジトリの追加
git remote add origin https://github.com/username/repository.git
# リモートリポジトリの確認
git remote -v
# リモートから最新情報を取得
git fetch
# リモートから取得してマージ
git pull origin main
# ローカルの変更をリモートに送信
git push origin main
# 初回プッシュ時のアップストリーム設定
git push -u origin main
Gitワークフロー
基本的な作業フロー
- 作業ディレクトリで編集: ファイルの変更・追加・削除
- ステージング:
git addで変更をステージングエリアに追加 - コミット:
git commitで変更をローカルリポジトリに保存 - プッシュ:
git pushでリモートリポジトリに送信
Git Flow
- main/master: 本番環境用の安定版ブランチ
- develop: 開発用のメインブランチ
- feature: 新機能開発用のブランチ
- release: リリース準備用のブランチ
- hotfix: 緊急修正用のブランチ
近年はGit FlowよりもシンプルなGitHub Flow(mainブランチと短命なfeatureブランチのみで運用し、こまめにプルリクエストとデプロイを繰り返す方式)や、さらに進んだトランクベース開発(機能フラグを活用しながら常にmainブランチへ小さな変更を統合し続ける方式)を採用するチームも増えています。プロジェクトのリリース頻度やチーム規模に応じて、適切なブランチ戦略を選ぶことが重要です。
よく使用される高度な機能
履歴の修正
# 最新コミットの修正
git commit --amend
# 特定のコミットを取り消し
git revert コミットハッシュ
# 複数のコミットを修正(対話的リベース)
git rebase -i HEAD~3
# コミットの取り消し(注意:危険な操作)
git reset --hard HEAD~1
一時的な変更の保存
# 作業中の変更を一時保存
git stash
# 一時保存の一覧表示
git stash list
# 一時保存の変更を復元
git stash pop
# 一時保存の削除
git stash drop
.gitignoreによる管理対象外ファイルの設定
ビルド成果物や依存パッケージ、環境ごとの設定ファイルなど、バージョン管理に含めたくないファイルは.gitignoreファイルで除外パターンを指定します。
# .gitignore の例
node_modules/
dist/
.env
*.log
.DS_Store
マージコンフリクトの解決
同じファイルの同じ箇所が異なるブランチで変更されると、マージ時にコンフリクト(競合)が発生します。Gitはコンフリクト箇所を以下のようなマーカーで示すため、どちらの変更を残すか、あるいは両方を組み合わせるかを手動で編集してから再度コミットします。
<<<<<<< HEAD
現在のブランチでの変更内容
=======
マージしようとしているブランチでの変更内容
>>>>>>> feature/new-feature
# 解決後
git add 対象ファイル
git commit
メリット
- 分散型: 各開発者が完全なコピーを持つため、障害に強い
- 高速: ローカルでの操作が非常に高速
- ブランチ機能: 軽量で高速なブランチ作成・切り替え
- フレキシブル: 様々な開発ワークフローに対応
- 統合性: データの整合性を保証するハッシュベースの管理
- 豊富なツール連携: GitHub・GitLab・Bitbucketなど多数のホスティングサービスとGUIツールが利用可能
デメリット
- 学習コスト: 概念が複雑で習得に時間がかかる
- バイナリファイル: 大きなバイナリファイルの管理が苦手
- 複雑な履歴: マージやブランチが複雑になりがち
- コマンドライン: 基本的にはコマンドライン操作が必要
これらのデメリットの多くは、GUIクライアント(GitKraken、Sourcetree、VSCode組み込みのGit機能など)の活用や、大容量ファイル向けのGit LFS(Large File Storage)拡張の利用によって緩和できます。導入時にはチーム内でブランチ戦略やコミットメッセージの書き方などのルールを事前に取り決めておくと、運用がスムーズになります。
実務での活用シーン
- チーム開発でのコード共同編集: ブランチを使って複数の機能を並行開発し、プルリクエスト(マージリクエスト)を通じてコードレビューを行うのが一般的なフローです。
- CI/CDパイプラインのトリガー: 特定ブランチへのプッシュやタグ付けをきっかけに、自動テストやデプロイを実行する仕組みの起点として使われます。
- 個人開発でのバックアップ・履歴管理: 1人での開発でも、変更履歴を追跡できることでいつでも過去の状態に戻せる安心感があります。
- 設定ファイルやドキュメントの管理: コード以外にもInfrastructure as Codeの設定ファイルや技術文書をGitで管理し、変更履歴を残す用途にも使われます。
- 障害調査・原因特定:
git bisectやgit blameを使い、いつどのコミットでバグが混入したかを特定する用途にも活用されます。
SVNとの比較
| 項目 | Git | Subversion(SVN) |
|---|---|---|
| 管理方式 | 分散型(各自が完全な履歴を保持) | 集中型(中央サーバーに履歴を一元管理) |
| オフライン作業 | コミット・ブランチ作成もオフラインで可能 | 多くの操作にサーバー接続が必要 |
| ブランチ・マージ | 軽量で高速、日常的に使う前提の設計 | コストが高く、頻繁な利用には不向き |
| 現在の主流度 | 業界標準として広く普及 | 一部のレガシーシステムで継続利用 |
関連用語
- GitHub: Gitリポジトリのホスティングサービス
- GitLab: Git管理とCI/CDを統合したプラットフォーム
- Bitbucket: Atlassian社のGitリポジトリサービス
- プルリクエスト: Gitホスティングサービス上で行うコードレビューの仕組み
- バージョン管理: Gitを含むソースコード履歴管理の総称
関連リンク
よくある質問(FAQ)
Q. Gitとは何ですか
Gitは分散バージョン管理システムで、ソースコードの変更履歴を追跡・管理し、複数の開発者が同時に作業できる環境を提供します。現在最も広く使用されているバージョン管理システムです。
Q. Gitの主な用途・メリットは
Gitは開発ツール分野で広く活用されており、業務効率化、システム最適化、生産性向上に貢献しています。企業規模を問わず導入が進んでいます。
Q. 2025-2026年のGitの最新動向は
Gitは2025-2026年にかけてAI統合、自動化、クラウドネイティブ対応、セキュリティ強化などの進化が進んでいます。
Q. GitとGitHubの違いは何ですか
Gitはローカルで動作するバージョン管理システムそのものであり、GitHubはそのGitリポジトリをインターネット上でホスティングし、プルリクエストやIssue管理などのコラボレーション機能を提供するサービスです。GitHub以外にもGitLabやBitbucketなど複数のホスティングサービスが存在します。
Q. git mergeとgit rebaseの違いは何ですか
git mergeは2つのブランチの履歴をそのまま残してマージコミットを作成するのに対し、git rebaseはブランチのコミットを別のブランチの先頭に付け替えて履歴を直線的に整理します。共有ブランチに対するrebaseは他の開発者の履歴と競合しやすいため、通常は自分のローカルブランチ内でのみ使用することが推奨されます。
