1. バージョン管理入門 MOC

2. バージョン管理システム (VCS) の種類と歴史 MOC

3. Git MOC (最も詳細なセクション)

3.1. Gitの基本概念とアーキテクチャ MOC

  • Gitの設計思想と特徴 (Linus Torvaldsによる開発、速度、単純な設計、非線形開発の強力なサポート、完全分散型、大規模プロジェクトへの対応能力)
  • Gitの3つの状態/エリア
    • [[ワーキングディレクトリ (Working Directory)]] (作業中のファイル群)
    • [[ステージングエリア (Staging Area / Index)]] (コミット対象の変更を準備する場所)
    • [[Gitディレクトリ (.git directory / Repository)]] (プロジェクトのメタデータとオブジェクトデータベース)
  • Gitの主要オブジェクト
    • [[Blob (ブロブオブジェクト)]] (ファイルの内容)
    • [[Tree (ツリーオブジェクト)]] (ディレクトリ構造とファイル情報)
    • [[Commit (コミットオブジェクト)]] (スナップショット、親コミット、作者、メッセージなど)
    • [[Tag (タグオブジェクト)]] (特定のコミットへのポインタ、アノテートタグと軽量タグ)
  • SHA-1ハッシュ (識別子)
  • ポインタ (HEAD, ブランチ名, タグ名)
  • Gitのスナップショットベースの考え方 (差分ベースではない)
  • (オプション) Gitの内部構造の概要 (.gitディレクトリの中身) (objects, refs, HEADなど)

3.2. Gitのインストールと初期設定 MOC

  • 各OS (Windows, macOS, Linux) へのGitのインストール方法
  • 初期設定 (git config)
    • [[ユーザー名とメールアドレスの設定 (user.name, user.email)]]
    • [[デフォルトエディタの設定 (core.editor)]]
    • [[デフォルトブランチ名の設定 (init.defaultBranch)]] (例: main)
    • [[エイリアスの設定 (alias)]]
    • [[改行コードの扱い (core.autocrlf, core.safecrlf)]]
    • [[グローバル設定 (—global) とローカル設定]]
  • .gitignore ファイル
    • [[バージョン管理対象外にするファイルやディレクトリの指定方法]]
    • [[グローバルな.gitignoreファイル]]
    • [[.gitignoreのパターン記述ルール]]
  • .gitattributes ファイル (改行コード、差分・マージ戦略の指定など - 概要)

3.3. Gitの基本操作 (リポジトリ作成と変更管理) MOC

  • リポジトリの作成
    • [[git init (新規ローカルリポジトリの作成)]]`
    • [[git clone <repository_url> (既存リモートリポジトリの複製)]]`
  • 変更の追跡とステージング
    • [[git status (ファイルの状態確認)]]` (Untracked, Modified, Staged, Unmodified)
    • [[git add <file> (ファイルをステージングエリアに追加)]]`
    • [[git add . (カレントディレクトリ以下の変更を全てステージング)]]`
    • [[git add -p (パッチモードでのステージング)]]`
    • [[git rm <file> (ファイルの削除とステージング)]] (—cached`オプション)
    • [[git mv <old_name> <new_name> (ファイル名の変更とステージング)]]`
  • コミット (変更の記録)
    • [[git commit -m "commit message" (ステージングされた変更をコミット)]]`
    • [[git commit -a -m "commit message" (追跡中ファイルの変更をステージングしてコミット)]]`
    • [[git commit --amend (直前のコミットを修正)]]` (プッシュ前のみ推奨)
    • 良いコミットメッセージの書き方 (Conventional Commitsなど)
  • 履歴の確認
    • [[git log (コミット履歴の表示)]]`
      • [[git log --oneline, --graph, --decorate, --stat, -p, --author, --since, --untilなどのオプション]]
    • [[git show <commit_hash> (特定のコミットの詳細表示)]]`
    • [[git diff (ワーキングディレクトリとステージングエリアの差分)]]`
    • [[git diff --staged (ステージングエリアと最新コミットの差分)]]`
    • [[git diff <commit1> <commit2> (2つのコミット間の差分)]]`
    • [[git blame <file> (ファイルの各行の最終変更者とコミットを表示)]]`
  • 変更の取り消し
    • [[git restore <file> (ワーキングディレクトリの変更を取り消し)]] (git checkout — `の代替)
    • [[git restore --staged <file> (ステージングエリアから取り除く)]] (git reset HEAD `の代替)
    • [[git checkout <commit_hash> -- <file> (特定のコミットからファイルを取り出す)]]`
    • [[git reset <commit_hash> (HEADを指定したコミットに移動)]]`
      • [[--soft, --mixed (デフォルト), --hard オプションの違いと危険性]]
    • [[git revert <commit_hash> (特定のコミットを打ち消す新しいコミットを作成)]]` (公開履歴の変更に適している)

3.4. Gitのブランチ操作 (Git Branching) MOC

  • ブランチとは
  • ブランチの作成と切り替え
    • [[git branch <branch_name> (ブランチの作成)]]`
    • [[git branch (ブランチの一覧表示)]] (-r, -a`オプション)
    • [[git checkout <branch_name> (ブランチの切り替え)]]`
    • [[git switch <branch_name> (ブランチの切り替え - checkoutの代替)]]`
    • [[git checkout -b <branch_name> (ブランチの作成と切り替え)]]`
    • [[git switch -c <branch_name> (ブランチの作成と切り替え - checkout -bの代替)]]`
  • ブランチのマージ (統合)
    • [[git merge <branch_name> (指定ブランチをカレントブランチにマージ)]]`
    • Fast-forwardマージ
    • 3-wayマージ (再帰的マージ)
      • [[マージコミットの生成]]
    • マージコンフリクト (競合) の解決
      • [[コンフリクトが発生する条件]]
      • [[コンフリクトマーカー (<<<<<<<, =======, >>>>>>>)]]
      • [[手動でのコンフリクト解決手順]]
      • [[マージツールの利用 (git mergetool)]]
      • [[git addgit commit による解決済みコンフリクトの記録]]
      • [[git merge --abort (マージの中止)]]`
  • ブランチの削除
    • [[git branch -d <branch_name> (マージ済みブランチの削除)]]`
    • [[git branch -D <branch_name> (未マージブランチの強制削除)]]`
  • ブランチの応用
    • [[フィーチャーブランチ]]
    • [[リリースブランチ]]
    • [[ホットフィックスブランチ]]
  • (オプション) スタッシュ (Stash)
    • [[git stash (未コミットの変更を一時退避)]]`
    • [[git stash list, git stash apply, git stash pop, git stash drop]]

3.5. Gitのリモート操作 (Working with Remotes) MOC

  • リモートリポジトリとは (共有サーバー上のリポジトリ)
  • リモートリポジトリの管理
    • [[git remote add <name> <url> (リモートリポジトリの追加)]]`
    • [[git remote -v (リモートリポジトリの一覧表示)]]`
    • [[git remote show <name> (リモートリポジトリの詳細表示)]]`
    • [[git remote rename <old_name> <new_name> (リモート名の変更)]]`
    • [[git remote remove <name> (リモートリポジトリの削除)]]`
  • リモートリポジトリからの取得
    • [[git fetch <remote_name> (リモートの変更を取得、ローカルブランチは更新しない)]]`
    • [[リモート追跡ブランチ (Remote-tracking branches -例: origin/main)]]
  • リモートリポジトリへのプッシュ (Push)
    • [[git push <remote_name> <local_branch_name>:<remote_branch_name> (ローカルブランチをリモートにプッシュ)]]`
    • [[git push <remote_name> <branch_name> (ローカルとリモートが同名の場合)]]`
    • [[git push -u <remote_name> <branch_name> (アップストリーム設定とプッシュ)]]`
    • [[git push --force (強制プッシュ - 危険性、使用場面の限定)]]`
    • [[git push <remote_name> --delete <remote_branch_name> (リモートブランチの削除)]]`
    • [[git push --tags (タグのプッシュ)]]`
  • リモートリポジトリからのプル (Pull)
    • [[git pull <remote_name> <remote_branch_name> (fetch + mergeの糖衣構文)]]`
    • プル時のコンフリクト解決 (マージコンフリクトと同様)
    • [[git pull --rebase (フェッチ + リベース)]] (履歴を直線的に保つ)
  • フォーク (Fork) とプルリクエスト (Pull Request / Merge Request) (GitHub/GitLabなどのホスティングサービスにおける概念)

3.6. Gitの高度な操作とテクニック MOC

3.7. Gitのワークフロー (Git Workflows) MOC

3.8. Gitホスティングサービス MOC

  • Gitホスティングサービスの役割 (リモートリポジトリ提供、コラボレーション機能)
  • GitHub MOC
    • [[GitHubの機能 (リポジトリ、プルリクエスト、Issueトラッキング、Actions (CI/CD), Pages, Projects)]]
  • GitLab MOC
    • [[GitLabの機能 (リポジトリ、マージリクエスト、Issueトラッキング、CI/CD (Auto DevOps), Wiki, パッケージレジストリ)]]
    • [[セルフホスト版とSaaS版]]
  • Bitbucket MOC (Atlassian製品との連携)
  • Azure Repos (Azure DevOps) MOC
  • 各ホスティングサービスの比較 (料金、機能、プライベート/パブリックリポジトリ)

3.9. Gitのベストプラクティス MOC

  • [[頻繁にコミットする (小さく、論理的な単位で)]]
  • [[明確で一貫性のあるコミットメッセージを書く]]
  • [[作業前に git pull(またはfetch&merge/rebase) する]]
  • [[フィーチャーブランチを効果的に活用する]]
  • [[公開履歴をリベースしない (黄金律の再確認)]]
  • [[コードレビューを実践する]]
  • [[.gitignoreを適切に設定する]]
  • [[不要なファイルをコミットしない]]
  • [[定期的にリモートリポジトリと同期する]]
  • [[チームでワークフローの合意を形成する]]

3.10. GitのGUIツール MOC

  • [[SourceTree]]
  • [[GitKraken]]
  • [[GitHub Desktop]]
  • [[IDE統合のGitクライアント (VS Code, IntelliJ IDEA, Eclipseなど)]]
  • CLIとの使い分け

3.11. Gitのトラブルシューティング MOC

  • [[一般的なマージコンフリクトの解決]] (再掲)
  • [[誤ってコミットした変更の取り消し]] (revert, reset)
  • [[失ったコミットの回復 (reflog)]]
  • [[ブランチを間違えて作業した場合の対処]]
  • [[Detached HEAD状態とその解決]]
  • [[大きなファイルのコミット問題と対処 (Git LFS, BFG Repo-Cleaner)]]
  • [[リモートとの同期エラー]]

4. その他のバージョン管理システムの概要 MOC

4.1. Subversion (SVN) - 概要と比較 MOC

  • [[SVNの基本コマンド (checkout, commit, update, add, delete, copy, move)]]
  • [[SVNのブランチとマージ (ディレクトリコピーベース)]]
  • [[SVNのロック機構 (一部ファイルタイプ向け)]]
  • [[SVNとGitの主な違いと比較]] (集中型 vs 分散型、ブランチ/マージの容易さ、オフライン作業)
  • [[SVNからGitへの移行]]

4.2. Mercurial (Hg) - 概要と比較 MOC

  • [[Hgの基本コマンド (clone, commit, push, pull, update, add, remove, branch, merge)]]
  • [[Hgの思想とGitとの類似点・相違点]] (コマンドの分かりやすさ、拡張性、リビジョン番号)
  • [[Hgのブックマークと名前付きブランチ]]
  • [[Hgのフェーズ (public, draft, secret)]]

5. バージョン管理の応用と高度なトピック MOC

6. バージョン管理と開発プロセス連携 MOC

7. バージョン管理アンチパターン MOC

  • [[バージョン管理システムを使わない]]
  • [[巨大なコミット (変更内容が多すぎる)]]
  • [[意味不明なコミットメッセージ]]
  • [[頻繁でないコミット/プッシュ (ローカルに溜め込む)]]
  • [[ブランチを使わない (全員がmain/masterに直接コミット)]]
  • [[長期間生存するフィーチャーブランチ (マージコンフリクト地獄)]]
  • [[公開履歴の強制プッシュ (git push —force の乱用)]]
  • [[バイナリファイルや生成物を不用意にコミットする (Git LFSなどを使わない)]]
  • [[機密情報 (パスワード、APIキー) をコミットする]]
  • [[.gitignoreを適切に使わない]]
  • [[コンフリクト解決を他人に任せる/適当に行う]]
  • [[チームでワークフローの合意がない]]