Git

バージョン管理分散システムDevOpsCLIソースコード管理ブランチ管理コラボレーション

バージョン管理ツール

Git

概要

Gitは、世界で最も広く使用されているオープンソースの分散型バージョン管理システムです。2005年にLinux Kernelの開発者であるLinus Torvaldsによって作成され、現在ではソフトウェア開発における事実上の標準となっています。各開発者が完全なリポジトリのコピーを持つ分散型アーキテクチャにより、高速性、データ整合性、柔軟なブランチング、オフライン作業を実現し、個人開発から大規模エンタープライズまで幅広く採用されています。

詳細

Git 2025年版は、分散型バージョン管理システムの決定版として確固たる地位を維持し続けています。15年以上の開発実績により成熟したコマンド体系と優れた安定性を誇り、GitHub、GitLab、Bitbucket等の主要プラットフォームで採用されています。分散型アーキテクチャによりローカルでの高速操作を重視した設計により、バージョン管理をシンプルで効率的な方法で実装可能。ブランチ管理、マージ機能、履歴追跡、タグ機能など企業レベルの開発要件を満たす豊富な機能を提供します。

主な特徴

  • 分散型アーキテクチャ: 各開発者が完全なリポジトリのコピーを持つ
  • 高速性: ほとんどの操作がローカルで実行され、非常に高速
  • データ整合性: ハッシュ値によるファイル破損検出機能
  • 柔軟なブランチング: 軽量で効率的なブランチ作成・マージ
  • 非線形開発サポート: 何千もの並行ブランチを処理可能
  • オフライン作業: ネットワーク接続なしでも開発継続可能

メリット・デメリット

メリット

  • 95%という圧倒的なマーケットシェアを持つ業界標準としての信頼性
  • 分散型アーキテクチャによる単一障害点の排除と高い復旧力
  • ローカル操作による高速性とネットワーク待機時間の削減
  • 豊富なコミュニティサポートとサードパーティツール統合
  • GitHub、GitLab等の主要プラットフォームとの優れた統合性
  • 軽量で効率的なブランチ管理による柔軟な開発フロー

デメリット

  • 初心者には学習コストが高く、コマンド体系が複雑
  • 大容量ファイルの管理が苦手(Git LFS等の追加ツールが必要)
  • バイナリファイルの差分管理が非効率的
  • 複雑なマージコンフリクトの解決には経験が必要
  • GUI操作よりもCLI中心の操作体系
  • ディスク使用量が集中型システムより多い傾向

参考ページ

書き方の例

インストールと初期設定

# Gitのインストール確認
git --version

# 基本設定
git config --global user.name "Your Name"
git config --global user.email "[email protected]"

# デフォルトブランチ名を設定
git config --global init.defaultBranch main

# 設定確認
git config --list --global

リポジトリの初期化とクローン

# 新しいリポジトリを初期化
git init my-project
cd my-project

# 既存のリポジトリをクローン
git clone https://github.com/user/repository.git
git clone [email protected]:user/repository.git  # SSH経由

# 特定のブランチをクローン
git clone -b develop https://github.com/user/repository.git

# 浅いクローン(履歴を制限)
git clone --depth 1 https://github.com/user/repository.git

基本的な変更管理

# ファイルの状態を確認
git status
git status --short  # 簡潔表示

# 変更差分を表示
git diff
git diff --staged  # ステージングエリアの差分
git diff HEAD~1   # 前のコミットとの差分

# ファイルをステージングエリアに追加
git add filename.txt
git add .          # すべてのファイル
git add *.js       # JavaScriptファイルのみ
git add -p         # 対話的に選択

# ステージングエリアからファイルを削除
git reset filename.txt

# コミットを作成
git commit -m "コミットメッセージ"
git commit -am "追加とコミットを同時実行"  # 追跡済みファイルのみ

# コミット履歴を表示
git log
git log --oneline --graph --all  # 視覚的な履歴表示
git log --since="2 weeks ago"     # 期間指定
git log --author="Author Name"    # 作者指定

ブランチ操作

# ブランチ一覧を表示
git branch          # ローカルブランチ
git branch -r       # リモートブランチ
git branch -a       # すべてのブランチ

# 新しいブランチを作成
git branch feature-branch

# ブランチを切り替え
git switch feature-branch
git checkout feature-branch  # 旧コマンド

# ブランチ作成と切り替えを同時実行
git switch -c new-feature
git checkout -b new-feature  # 旧コマンド

# ブランチ名を変更
git branch -m old-name new-name

# ブランチを削除
git branch -d feature-branch  # 安全な削除
git branch -D feature-branch  # 強制削除

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

マージとリベース

# ブランチをマージ
git switch main
git merge feature-branch

# Fast-forwardマージを無効化
git merge --no-ff feature-branch

# マージ中のコンフリクト確認
git status
git diff

# コンフリクト解決後にマージを完了
git add conflicted-file.txt
git merge --continue

# マージを中止
git merge --abort

# リベース実行
git switch feature-branch
git rebase main

# インタラクティブリベース
git rebase -i HEAD~3

# リベース中のコンフリクト解決
git add resolved-file.txt
git rebase --continue
git rebase --abort  # リベース中止

リモートリポジトリ操作

# リモートリポジトリの確認
git remote -v

# リモートリポジトリを追加
git remote add origin https://github.com/user/repository.git
git remote add upstream https://github.com/original/repository.git

# リモートから最新情報を取得
git fetch origin
git fetch --all  # すべてのリモート

# リモートブランチをプル
git pull origin main
git pull --rebase origin main  # リベースでプル

# ローカル変更をプッシュ
git push origin main
git push -u origin feature-branch  # 初回プッシュ時

# 強制プッシュ(注意が必要)
git push --force-with-lease origin main

高度な操作と履歴管理

# コミットを取り消し(履歴は残す)
git revert <commit-hash>
git revert HEAD  # 最新コミットを取り消し

# 作業ディレクトリをリセット
git reset --soft HEAD~1   # コミットのみ取り消し
git reset --mixed HEAD~1  # ステージングも取り消し
git reset --hard HEAD~1   # 作業ディレクトリも取り消し

# 一時的な変更の保存
git stash
git stash push -m "作業中の変更を保存"
git stash list
git stash pop     # 最新のstashを適用・削除
git stash apply   # stashを適用(残す)
git stash drop    # stashを削除

# 特定のコミットを適用
git cherry-pick <commit-hash>

# ファイルを特定のコミット状態に戻す
git checkout <commit-hash> -- filename.txt

# 紛失したコミットの復旧
git reflog  # 操作履歴を確認
git cherry-pick <lost-commit-hash>

タグとリリース管理

# タグ一覧を表示
git tag
git tag -l "v1.*"  # パターンマッチ

# 軽量タグを作成
git tag v1.0.0

# 注釈付きタグを作成
git tag -a v1.0.0 -m "バージョン1.0.0リリース"

# 過去のコミットにタグを付与
git tag -a v0.9.0 <commit-hash>

# タグをリモートにプッシュ
git push origin v1.0.0
git push origin --tags  # すべてのタグ

# タグを削除
git tag -d v1.0.0                    # ローカル
git push origin --delete tag v1.0.0  # リモート

ワークフロー例

# 個人開発フロー
git switch -c feature/new-component
# 開発・テスト
git add .
git commit -m "新しいコンポーネントを実装"
git switch main
git pull origin main
git switch feature/new-component
git rebase main
git switch main
git merge feature/new-component
git push origin main
git branch -d feature/new-component

# チーム開発フロー(Fork & Pull Request)
git clone https://github.com/original/project.git
git remote add upstream https://github.com/original/project.git
git switch -c feature/improvement
# 開発・コミット
git push origin feature/improvement
# GitHub/GitLabでPull Request作成
git switch main
git pull upstream main
git push origin main

# Gitflow風のリリースフロー
git switch -c release/v1.2.0 develop
# リリース準備作業
git switch main
git merge release/v1.2.0
git tag -a v1.2.0 -m "Version 1.2.0"
git switch develop
git merge release/v1.2.0
git branch -d release/v1.2.0