この用語をシェア
概要
Gitは分散バージョン管理システムで、ソースコードの変更履歴を追跡・管理し、複数の開発者が同時に作業できる環境を提供します。2005年にLinux Torvalds氏によって開発され、現在最も広く使用されているバージョン管理システムです。
主要概念
基本要素
- リポジトリ: プロジェクトの全履歴を保存する場所
- コミット: 変更内容のスナップショット
- ブランチ: 独立した開発ライン
- マージ: 複数のブランチを統合する作業
- ワーキングディレクトリ: 実際に作業を行う場所
- ステージングエリア: コミット前の変更を準備する場所
分散型の特徴
- ローカルリポジトリ: 各開発者のマシンに完全なコピー
- リモートリポジトリ: 共有用の中央リポジトリ
- オフライン作業: ネットワークなしでもバージョン管理が可能
- 高い可用性: 単一障害点がない
基本的な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 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
メリット
- 分散型: 各開発者が完全なコピーを持つため、障害に強い
- 高速: ローカルでの操作が非常に高速
- ブランチ機能: 軽量で高速なブランチ作成・切り替え
- フレキシブル: 様々な開発ワークフローに対応
- 統合性: データの整合性を保証するハッシュベースの管理
デメリット
- 学習コスト: 概念が複雑で習得に時間がかかる
- バイナリファイル: 大きなバイナリファイルの管理が苦手
- 複雑な履歴: マージやブランチが複雑になりがち
- コマンドライン: 基本的にはコマンドライン操作が必要
関連技術
- GitHub: Gitリポジトリのホスティングサービス
- GitLab: Git管理とCI/CDを統合したプラットフォーム
- Bitbucket: Atlassian社のGitリポジトリサービス
- Git LFS: 大きなファイルを効率的に管理する拡張
- GitKraken: Git操作用のGUIツール