logo Fonnpo

お問い合わせ
2026年5月30日 3 分で読める Fonnpo

Git 完全ガイド

Git は最も広く使われているバージョン管理システムです。初期設定・基本ワークフロー・ブランチ管理・マージとリベース・リモートリポジトリ・スタッシュ・変更の取り消し・タグ・.gitignore・Fork 協作ワークフロー・よくある問題まで、日常開発に必要なすべての Git 操作を一本に網羅しました。

#Git#DevOps#SSH

Git は現在最も広く使われているバージョン管理システムです。初期設定から始まり、ブランチ・マージ・リベース・変更の取り消し・スタッシュ・チーム協作ワークフローなど、日常開発で使うほとんどの操作を網羅します。

初期設定

初めて Git を使う前に、グローバル設定をします:

Bash
        git config --global user.name "Your Name"
git config --global user.email "you@example.com"

    

デフォルトのブランチ名を設定(main 推奨):

Bash
        git config --global init.defaultBranch main

    

デフォルトのエディターを設定(VS Code の例):

Bash
        git config --global core.editor "code --wait"

    

すべての設定を確認:

Bash
        git config --list

    

リポジトリの作成

ゼロから始める:

Bash
        mkdir my-project && cd my-project
git init

    

既存のリポジトリをクローン:

Bash
        # HTTPS(ユーザー名・パスワードまたはトークンが必要)
git clone https://github.com/user/repo.git

# SSH(SSH キーの設定が必要)
git clone git@github.com:user/repo.git

# 特定のフォルダ名でクローン
git clone git@github.com:user/repo.git my-folder

    

基本ワークフロー

Git のローカルは3層構造です:作業ディレクトリ → ステージングエリア → ローカルリポジトリ

Bash
        # 現在の状態を確認
git status

# ファイルをステージに追加
git add file.txt
git add .          # すべての変更をステージ
git add -p         # 変更の一部を対話的に選択(非常に便利)

# コミット
git commit -m "feat: add user login"

# ステージをスキップして追跡済みファイルを直接コミット
git commit -am "fix: correct typo"

    

コミットメッセージの規約(Conventional Commits)

良いコミットメッセージは履歴を読みやすくし、CHANGELOG の自動生成を可能にします:

Properties
        type(scope): subject

feat     新機能
fix      バグ修正
docs     ドキュメント変更
style    フォーマット調整(ロジック変更なし)
refactor リファクタリング
test     テストの追加・修正
chore    ビルドプロセス・ツール設定など

    

履歴の確認

Bash
        # コミット履歴を確認
git log

# 一行の簡潔なフォーマット
git log --oneline

# グラフィカルなブランチビュー
git log --oneline --graph --all

# 特定ファイルの履歴を確認
git log --follow -- path/to/file

# 特定のコミットの変更内容を確認
git show <commit-hash>

    

ブランチ管理

ブランチは Git の最も強力な機能の一つで、作成・切り替えのコストはほぼゼロです。

Bash
        # すべてのブランチを表示
git branch
git branch -a   # リモートブランチを含む

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

# ブランチを切り替え
git switch feature/login

# 作成と切り替えを一度に(よく使う省略形)
git switch -c feature/login

# ブランチを削除
git branch -d feature/login    # 安全な削除(未マージ時に警告)
git branch -D feature/login    # 強制削除

# 現在のブランチの名前を変更
git branch -m new-name

    

マージ

Bash
        # ターゲットブランチに切り替え(通常は main)
git switch main

# feature ブランチをマージ
git merge feature/login

    

Fast-forward マージ:ターゲットブランチに新しいコミットがない場合、ポインタを前に移動するだけで履歴は一直線になります。

Non-fast-forward マージ:ターゲットに新しいコミットがある場合、マージコミットが作成され、履歴にフォーク構造が残ります。

マージコミットを常に作成するには --no-ff

Bash
        git merge --no-ff feature/login

    

コンフリクトの解決

マージコンフリクトが発生した場合、ファイルにマーカーが付きます:

Bash
        <<<<<<< HEAD
ローカルの内容
=======
マージされてくる内容
>>>>>>> feature/login

    

正しい内容になるよう手動で編集し、その後:

Bash
        git add .
git commit    # Git がマージコミットメッセージを自動入力

    

リベース

リベースは現在のブランチのコミットを別のブランチの末尾に「移植」し、履歴を線形かつクリーンに保ちます。

Bash
        # feature ブランチ上で、最新の main の上に移植する
git switch feature/login
git rebase main

    

対話的リベース(コミット履歴の整理に非常に便利):

Bash
        # 直近 3 つのコミットを編集
git rebase -i HEAD~3

    

エディターで使えるコマンド:

コマンド効果
pickコミットをそのまま保持
reword保持するがメッセージを編集
squash前のコミットに統合
fixupsquash と同じ、メッセージ破棄
dropコミットを削除

注意: リモートの共有ブランチに push 済みのコミットをリベースしてはいけません。他の人の履歴との衝突を引き起こします。

リモートリポジトリ

Bash
        # リモートを確認
git remote -v

# リモートを追加
git remote add origin git@github.com:user/repo.git

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

# プッシュ(初回は -u でアップストリームを設定)
git push -u origin main

# 以降は
git push

# プル(fetch + merge)
git pull

# フェッチのみ(マージしない)
git fetch origin

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

    

スタッシュ

ブランチを切り替える必要があるが、コミットする準備ができていない変更がある場合:

Bash
        # 現在の変更をスタッシュ
git stash

# 説明付きでスタッシュ
git stash push -m "wip: half-done login form"

# スタッシュの一覧を確認
git stash list

# 直近のスタッシュを復元(一覧に残す)
git stash apply

# 復元して一覧から削除
git stash pop

# 特定のスタッシュを復元
git stash apply stash@{2}

# 特定のスタッシュを削除
git stash drop stash@{0}

# すべてのスタッシュをクリア
git stash clear

    

変更の取り消し

Git の取り消しコマンドは複数あります。シナリオ別に理解しましょう:

作業ディレクトリの変更を取り消す(add 前)

Bash
        # ファイルを最後のコミット状態に戻す
git restore file.txt

# すべてのファイルを戻す
git restore .

    

ステージを取り消す(add 後、commit 前)

Bash
        git restore --staged file.txt

    

最後のコミットを修正する

Bash
        # コミットメッセージを編集、または追加ファイルを含める
git add forgotten-file.txt
git commit --amend

    

コミットを安全に取り消す(逆向きのコミットを作成)

Bash
        git revert <commit-hash>

    

特定のバージョンに戻す(reset)

Bash
        # ソフトリセット:コミットを取り消し、変更はステージに残す
git reset --soft HEAD~1

# ミックスリセット(デフォルト):コミットを取り消し、変更を作業ディレクトリに戻す
git reset HEAD~1

# ハードリセット:コミットと変更をすべて破棄(危険、慎重に)
git reset --hard HEAD~1

    

revert vs reset

  • revert は変更を元に戻す新しいコミットを追加し、履歴は保持される。共有ブランチに安全
  • reset は履歴を書き換える。push していないローカルコミットにのみ使用

タグ

通常、リリースバージョンのマークに使います:

Bash
        # 軽量タグ
git tag v1.0.0

# 注釈付きタグ(メッセージを含む)
git tag -a v1.0.0 -m "Release version 1.0.0"

# すべてのタグを表示
git tag

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

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

    

.gitignore

.gitignore は Git に追跡しないファイルを指定します:

Properties
        # 依存関係
node_modules/
vendor/

# ビルド出力
dist/
build/
*.min.js

# 環境変数
.env
.env.local

# OS ファイル
.DS_Store
Thumbs.db

# IDE 設定
.vscode/
.idea/

    

すでに Git に追跡されているファイルは、.gitignore に追加しても自動的に無視されません。まず追跡を解除する必要があります:

Bash
        git rm --cached file.txt          # 単一ファイルの追跡解除
git rm --cached -r node_modules/  # ディレクトリの追跡解除

    

協作シナリオ

Fork + Pull Request ワークフロー

  1. ターゲットリポジトリを自分のアカウントに Fork
  2. 自分の Fork をクローン
  3. feature ブランチを作成
  4. 開発・コミット
  5. 自分の Fork にプッシュ
  6. GitHub / GitLab で Pull Request / Merge Request を作成

Fork を上流と同期させる:

Bash
        # アップストリームリモートを追加
git remote add upstream git@github.com:original/repo.git

# アップストリームの最新を取得
git fetch upstream

# ローカル main にマージ
git switch main
git merge upstream/main

    

チーム協作の主要原則

  • main / master は通常保護されており、直接 push 不可
  • 機能ごとに feature ブランチを作成する
  • マージ前に最新の main にリベースしてコンフリクトを減らす
  • PR で Code Review を行い、その後マージする

便利なコマンド

Bash
        # 2つのブランチの差分を確認
git diff main feature/login

# ファイルの各行を誰が変更したか確認
git blame file.txt

# バグを引き起こしたコミットを二分探索で見つける
git bisect start
git bisect bad            # 現在のバージョンはバグあり
git bisect good v1.0.0    # このバージョンは正常
# Git が中間地点をチェックアウト。テストして good/bad をマーク
git bisect reset          # 終了

# 特定のコミットを現在のブランチに適用
git cherry-pick <commit-hash>

# 追跡されていないファイルとディレクトリをクリーンアップ
git clean -fd

    

よくある問題

push が拒否される(rejected)

通常、リモートに他の人の新しいコミットがある場合:

Bash
        git pull --rebase   # 取得後にリベース、線形履歴を保持
git push

    

誤って削除したブランチを復元

コミットはすぐには消えません。reflog から見つけられます:

Bash
        git reflog              # すべての操作履歴を確認
git switch -c recovered-branch <commit-hash>

    

大きなファイルを誤ってコミットした

大きなファイルは Git リポジトリに入れるべきではありません(リポジトリが永久に肥大化します)。

push 前であれば:

Bash
        git rm --cached bigfile.zip
git commit --amend

    

push 済みの場合は git filter-repo(廃止された filter-branch の代替)を使って履歴から完全に削除します。操作は複雑なので、最初から .gitignore で防ぐのが最善です。

Fonnpo