0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitとGitHub完全チートシート

Last updated at Posted at 2025-03-09

目次

Gitの基礎知識

Gitとは

  • 分散型バージョン管理システム
  • コードの変更履歴を記録・追跡
  • 複数人での共同作業を可能にする
  • オフラインでも操作可能

Gitの主要概念

  • リポジトリ: プロジェクトとその履歴を含む格納場所
  • コミット: 変更の保存ポイント
  • ブランチ: 独立した開発ラインを作成
  • マージ: ブランチの変更を統合
  • リモート: ネットワーク上の共有リポジトリ

Gitのセットアップと設定

インストール

# macOS (Homebrew)
brew install git

# Ubuntu/Debian
sudo apt-get install git

# Windows
# GitHubからインストーラーをダウンロード: https://git-scm.com/download/win

初期設定

# ユーザー情報の設定(必須)
git config --global user.name "あなたの名前"
git config --global user.email "あなたのメール"

# エディタの設定
git config --global core.editor "vim"  # または好みのエディタ

# デフォルトブランチ名の設定(Git 2.28以降)
git config --global init.defaultBranch main

# 設定の確認
git config --list

認証設定

# SSHキーの生成
ssh-keygen -t ed25519 -C "your_email@example.com"

# 公開キーの表示(GitHubに追加するため)
cat ~/.ssh/id_ed25519.pub

# SSHエージェントの起動と鍵の追加
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

エイリアスの設定

# よく使うコマンドのショートカット
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

基本的なGitコマンド

リポジトリの作成

# 新しいリポジトリを初期化
git init

# 既存のリポジトリをクローン
git clone https://github.com/ユーザー名/リポジトリ名.git  # HTTPS
git clone git@github.com:ユーザー名/リポジトリ名.git      # SSH

基本的な作業フロー

# ファイルの状態を確認
git status

# ファイルをステージングエリアに追加
git add ファイル名
git add .           # すべての変更をステージング
git add -p          # 変更を対話的にステージング

# 変更をコミット
git commit -m "コミットメッセージ"
git commit -am "メッセージ"  # 追跡されているファイルの変更をステージングしてコミット

# 変更をプッシュ
git push origin ブランチ名
git push            # 現在のブランチをデフォルトのリモートにプッシュ

# 変更を取得
git pull origin ブランチ名
git pull            # 現在のブランチの変更を取得してマージ

.gitignoreファイル

# .gitignoreの例
node_modules/
*.log
.DS_Store
.env
build/
dist/
*.bak
__pycache__/
*.pyc

ファイルの操作

# ファイルの削除
git rm ファイル名     # 実際にファイルを削除し、変更をステージング
git rm --cached ファイル名  # Gitの追跡からのみ削除(ファイルは残る)

# ファイルの移動/名前変更
git mv 古いパス 新しいパス

ブランチの操作

ブランチの基本操作

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

# ブランチの作成
git branch ブランチ名
git checkout -b ブランチ名  # ブランチを作成して切り替え
git switch -c ブランチ名    # Git 2.23以降

# ブランチの切り替え
git checkout ブランチ名
git switch ブランチ名      # Git 2.23以降

# ブランチの削除
git branch -d ブランチ名   # マージ済みのブランチを削除
git branch -D ブランチ名   # 強制削除

# ブランチ名の変更
git branch -m 古い名前 新しい名前  # 別のブランチの名前を変更
git branch -m 新しい名前           # 現在のブランチの名前を変更

マージとリベース

# ブランチのマージ
git merge ブランチ名       # 指定したブランチを現在のブランチにマージ
git merge --no-ff ブランチ名  # fast-forwardせずにマージコミットを作成
git merge --abort         # マージを中止

# リベース
git rebase ブランチ名      # 現在のブランチを指定したブランチにリベース
git rebase -i HEAD~3      # 直近3つのコミットを対話的にリベース
git rebase --abort        # リベースを中止
git rebase --continue     # コンフリクト解決後にリベースを続行

コンフリクトの解決

# コンフリクトファイルの確認
git status

# ファイルを編集してコンフリクトを解決
# <<<<<<< HEAD
# 現在のブランチの変更
# =======
# マージするブランチの変更
# >>>>>>> ブランチ名

# 解決後に続行
git add 解決したファイル
git merge --continue  # または git rebase --continue

変更の確認と比較

変更の差分表示

# 変更の差分を表示
git diff                # ワーキングディレクトリとステージングエリアの差分
git diff --staged       # ステージングエリアと最新コミットの差分
git diff HEAD           # ワーキングディレクトリと最新コミットの差分
git diff コミットID1 コミットID2  # 2つのコミットの差分
git diff ブランチ1..ブランチ2    # 2つのブランチの差分

# 差分の統計情報
git diff --stat

コミット履歴の表示

# コミット履歴の表示
git log                 # コミット履歴
git log --oneline       # 簡潔な形式
git log --graph --oneline --all  # グラフィカルなブランチ履歴
git log -p              # 各コミットの差分を表示
git log -n 5            # 直近5つのコミットを表示
git log --author="名前"   # 特定の作者のコミット
git log --since="2023-01-01" --until="2023-12-31"  # 期間指定
git log --grep="キーワード"  # コミットメッセージで検索

# 特定のファイルの履歴
git log -- ファイル名
git blame ファイル名     # 各行の最終変更者を表示

一時的な変更の保存(stash)

# 作業中の変更を一時保存
git stash
git stash save "メッセージ"  # メッセージ付きで保存

# 保存した変更の一覧
git stash list

# 保存した変更を適用
git stash apply         # スタックから削除せずに適用
git stash pop           # スタックから削除して適用
git stash apply stash@{n}  # 特定のスタッシュを適用

# スタッシュの操作
git stash show          # 最新のスタッシュの内容表示
git stash show -p       # 最新のスタッシュの詳細表示
git stash drop stash@{n}  # 特定のスタッシュを削除
git stash clear         # すべてのスタッシュを削除

コミットの修正と歴史の変更

コミットの修正

# 直前のコミットを修正
git commit --amend      # コミットメッセージを変更
git commit --amend --no-edit  # メッセージを変更せずにファイルを追加

# 複数のコミットを圧縮・並べ替え・分割・編集
git rebase -i HEAD~3    # 直近3つのコミットを対話的に操作
# 対話モードで使用可能なコマンド:
# p, pick = コミットをそのまま使用
# r, reword = コミットを使用するがメッセージを変更
# e, edit = コミットを使用するが一時停止して修正
# s, squash = コミットを使用するが前のコミットに統合
# f, fixup = squashと同様だがメッセージは破棄
# d, drop = コミットを削除

コミットの打ち消しとリセット

# コミットの打ち消し(新しいコミットを作成)
git revert コミットID    # 指定したコミットを打ち消す新しいコミットを作成
git revert HEAD         # 直前のコミットを打ち消す

# 歴史のリセット(注意!歴史を書き換える)
git reset --soft HEAD~1   # コミットを取り消し、変更をステージングエリアに残す
git reset --mixed HEAD~1  # コミットを取り消し、変更をワーキングディレクトリに残す
git reset --hard HEAD~1   # コミットと変更を完全に削除(注意!)

コミットの移動と選択

# コミットの選択(cherry-pick)
git cherry-pick コミットID  # 特定のコミットを現在のブランチに適用
git cherry-pick コミットID1..コミットID2  # 範囲を指定

# ブランチポインタの移動
git reset --hard コミットID  # 特定のコミットに移動(注意!)

# コミットの分割
git rebase -i コミットID^
# edit に変更し、rebase開始後:
git reset HEAD^           # コミットを取り消し
git add -p                # 変更を部分的にステージング
git commit -m "最初の部分"
git add .                 # 残りの変更をステージング
git commit -m "2番目の部分"
git rebase --continue

リモートリポジトリの操作

リモートの管理

# リモートの一覧表示
git remote -v

# リモートの追加
git remote add 名前 URL

# リモートの削除
git remote remove 名前

# リモートの変更
git remote set-url 名前 新しいURL

# リモートの詳細表示
git remote show origin

リモートとの同期

# リモートの情報を取得
git fetch origin         # 変更を取得するがマージしない
git fetch --all          # すべてのリモートから取得
git fetch --prune        # リモートで削除されたブランチを削除

# リモートの変更を取得してマージ
git pull                 # 現在のブランチの変更を取得してマージ
git pull --rebase        # 取得した変更をリベースで適用

# リモートブランチを追跡
git branch --track ブランチ名 origin/ブランチ名
git checkout --track origin/ブランチ名  # リモートブランチを追跡するローカルブランチを作成

# リモートブランチの削除
git push origin --delete ブランチ名

プッシュの詳細オプション

# 通常のプッシュ
git push origin ブランチ名

# 新しいリモートブランチにプッシュ
git push -u origin ブランチ名  # ブランチをプッシュして追跡設定

# 強制プッシュ(注意!)
git push --force         # 履歴を強制的に上書き(危険)
git push --force-with-lease  # 他の人の変更を上書きしないよう保護

# タグのプッシュ
git push origin タグ名
git push origin --tags   # すべてのタグをプッシュ

タグの操作

# タグの一覧
git tag
git tag -l "v1.*"        # パターンでフィルタリング

# タグの作成
git tag タグ名            # 軽量タグ
git tag -a タグ名 -m "メッセージ"  # 注釈付きタグ
git tag -a タグ名 コミットID      # 過去のコミットにタグ付け

# タグの削除
git tag -d タグ名         # ローカルタグの削除
git push origin :refs/tags/タグ名  # リモートタグの削除

GitHubの基礎知識

GitHubとは

  • Gitリポジトリのホスティングサービス
  • コードの共有・協力開発のためのプラットフォーム
  • コードレビュー、イシュー管理、CI/CD等の機能提供

GitとGitHubの違い

  • Git: 分散型バージョン管理システム(ツール)
  • GitHub: Gitリポジトリをホスティングするウェブサービス

GitHubアカウントとリポジトリ管理

アカウント設定

  • プロファイル設定
  • SSHキーの追加(Settings > SSH and GPG keys)
  • 二要素認証の設定(Settings > Password and authentication)
  • Personal Access Tokenの作成(Settings > Developer settings)

リポジトリの作成と管理

# ウェブインターフェイスでの作成
# 1. GitHubにログイン
# 2. 右上の「+」> New repository
# 3. 必要事項を入力して作成

# 既存のローカルリポジトリをGitHubに追加
git remote add origin https://github.com/ユーザー名/リポジトリ名.git
git branch -M main
git push -u origin main

# GitHubからクローン
git clone https://github.com/ユーザー名/リポジトリ名.git

リポジトリの設定

  • デフォルトブランチの変更
  • ブランチ保護ルールの設定
  • コラボレーターの追加
  • トピックの設定
  • リポジトリの公開/非公開設定

GitHubの主要機能

Pull Request(PR)

# 基本的なPRのワークフロー
git checkout -b 機能ブランチ
# 変更を加えてコミット
git commit -am "新機能を追加"
# ブランチをプッシュ
git push -u origin 機能ブランチ

# GitHubのウェブインターフェースでPRを作成
# 1. リポジトリページで「Compare & pull request」
# 2. ベースブランチと比較ブランチを確認
# 3. タイトルと説明を入力
# 4. 「Create pull request」をクリック

PRレビューとマージ

  • コードレビューの実施
  • レビューコメントの追加
  • 承認または変更リクエスト
  • PRのマージ方法:
    • Create a merge commit
    • Squash and merge
    • Rebase and merge

Issues

  • 課題・バグ・機能要望の追跡
  • テンプレートの使用
  • ラベル、マイルストーン、アサインの設定
  • Issue間のリンク
  • PRとIssueの連携(キーワード: fixes, closes, resolves)

Discussions

  • コミュニティディスカッションの場
  • カテゴリ分け
  • アナウンス、Q&A、アイデア共有

Wiki

  • プロジェクトのドキュメント管理
  • マークダウン形式でのページ作成
  • 目次と階層構造の設定

フォークとクローン

# GitHubでリポジトリをフォーク(ウェブインターフェース)

# フォークしたリポジトリをクローン
git clone https://github.com/あなたのユーザー名/リポジトリ名.git

# オリジナルリポジトリを追加(アップストリーム)
git remote add upstream https://github.com/オリジナル所有者/リポジトリ名.git

# アップストリームから更新を取得
git fetch upstream
git merge upstream/main  # または適切なブランチ
# または
git pull upstream main

ブランチ保護

  • mainブランチへの直接プッシュを禁止
  • マージ前にレビュー承認を必須に
  • ステータスチェック(CIテスト)の通過を必須に
  • 署名済みコミットの要求

セキュリティ機能

  • 脆弱性アラート
  • 依存関係のバージョン更新
  • Code scanning(コード品質・セキュリティ検査)
  • Secret scanning(誤ってコミットされた機密情報の検出)

GitHubフロー

基本的なワークフロー

  1. メインブランチからフィーチャーブランチを作成

    git checkout main
    git pull
    git checkout -b feature/新機能
    
  2. 変更を加えてコミット

    # ファイルを編集
    git add .
    git commit -m "機能を実装"
    
  3. 変更をプッシュしてPRを作成

    git push -u origin feature/新機能
    # GitHubでPRを作成
    
  4. レビュー後にマージ

    # GitHubでマージボタンを使用
    # または:
    git checkout main
    git merge feature/新機能
    git push
    
  5. ブランチの削除

    git branch -d feature/新機能
    git push origin --delete feature/新機能
    

GitHubフローの特徴

  • シンプルで理解しやすい
  • 継続的なデプロイに適している
  • メインブランチは常にデプロイ可能な状態を保つ
  • フィーチャーブランチでの作業と頻繁なPR

GitHubでのコラボレーション

Issue駆動開発

  1. GitHubでIssueを作成
  2. Issue番号を含むブランチを作成
    git checkout -b fix/123-バグ修正
    
  3. コミットメッセージにIssue番号を含める
    git commit -m "Fix #123: バグを修正"
    
  4. PRを作成し、Issueに関連付け

コードレビュー手法

  • 行ごとのコメント
  • 全体的なフィードバック
  • 提案付きコメント(変更案を直接提示)
  • レビュー状態:Comment, Approve, Request changes

プロジェクト管理

  • プロジェクトボードの使用
  • カンバン形式でのタスク管理
  • 自動化ルールの設定
  • マイルストーンによる進捗管理

ドキュメント作成

  • README.mdの充実
  • CONTRIBUTING.mdの作成
  • CODEOFCONDUCTの設定
  • GItHub Pagesの活用

GitHub Actions

基本構成

# .github/workflows/main.yml の例
name: CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Setup Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '16'
    - name: Install dependencies
      run: npm ci
    - name: Run tests
      run: npm test

トリガーの種類

  • push, pull_request
  • schedule(cron形式でスケジュール実行)
  • workflow_dispatch(手動実行)
  • repository_dispatch(外部イベント)

主なユースケース

  • CI(継続的インテグレーション)
    • コードのビルド
    • テストの実行
    • コードスタイルチェック
  • CD(継続的デリバリー)
    • 自動デプロイ
    • リリースの自動化
  • プロジェクト管理の自動化
    • Issue・PRへの自動ラベル付け
    • ステータスの自動更新

シークレットと環境変数

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Deploy to server
        env:
          API_KEY: ${{ secrets.API_KEY }}
        run: ./deploy.sh

GitHub CLI

インストールと設定

# インストール
# macOS: brew install gh
# Windows: scoop install gh または choco install gh
# Linux: apt install gh など

# 認証
gh auth login

リポジトリ操作

# リポジトリ作成
gh repo create 名前 --public/--private

# リポジトリクローン
gh repo clone ユーザー/リポジトリ

# リポジトリのビュー
gh repo view

# リポジトリをフォーク
gh repo fork ユーザー/リポジトリ

プルリクエスト操作

# PRを作成
gh pr create --title "タイトル" --body "説明"

# PR一覧の表示
gh pr list

# PRをチェックアウト
gh pr checkout 番号

# PRをレビュー
gh pr review 番号 --approve/--comment/--request-changes

# PRをマージ
gh pr merge 番号 --merge/--squash/--rebase

Issue操作

# Issueを作成
gh issue create --title "タイトル" --body "説明"

# Issue一覧の表示
gh issue list

# Issueの表示
gh issue view 番号

# Issueの状態変更
gh issue close 番号
gh issue reopen 番号

ワークフロー操作

# ワークフロー実行一覧
gh workflow list

# ワークフロー実行
gh workflow run ワークフロー名

高度なGit技術

Git Hooks

  • pre-commit: コミット前に実行
  • post-commit: コミット後に実行
  • pre-push: プッシュ前に実行
  • カスタムフックの作成: .git/hooks/ディレクトリ内に実行可能スクリプトを配置

サブモジュール

# サブモジュールの追加
git submodule add リポジトリURL パス

# サブモジュール付きのリポジトリをクローン
git clone --recursive リポジトリURL

# 既存のリポジトリのサブモジュールを初期化
git submodule init
git submodule update

# すべてのサブモジュールを更新
git submodule update --remote

Git LFS(Large File Storage)

# Git LFSのインストール
git lfs install

# ファイルタイプを追跡
git lfs track "*.psd"

# .gitattributesをコミット
git add .gitattributes
git commit -m "LFSで追跡するファイルを設定"

# 通常のGit操作と同様に使用
git add 大きなファイル
git commit -m "大きなファイルを追加"

Git Bisect

# バイセクトを開始
git bisect start

# 不具合が発生するコミットを指定
git bisect bad

# 不具合が発生しない古いコミットを指定
git bisect good コミットID

# 各コミットをテストして結果を報告
git bisect good  # 現在のコミットで問題なし
git bisect bad   # 現在のコミットで問題あり

# バイセクトを終了
git bisect reset

GPGでのコミット署名

# GPGキーを生成
gpg --full-generate-key

# GPGキーをGitに設定
git config --global user.signingkey GPGキーID

# コミットに署名
git commit -S -m "署名付きコミット"

# 常に署名するよう設定
git config --global commit.gpgsign true

リファレンスとリフログ

# reflog - 操作履歴を表示
git reflog

# 参照の表示
git show-ref
git show-ref --heads  # ローカルブランチの参照のみ

# refspecの使用
git push origin HEAD:refs/heads/新しいブランチ

フィルタリングとクリーンアップ

# ファイル履歴からの機密情報削除(注意!履歴書き換え)
git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch パス/ファイル名" \
  --prune-empty -- --all

# git-filter-repoの使用(より推奨)
# pip install git-filter-repo
git-filter-repo --path パス/ファイル名 --invert-paths

よくあるトラブルシューティング

コミットの取り消し

# 直前のコミットを取り消し(変更は保持)
git reset --soft HEAD^

# 直前のコミットを完全に削除(注意!)
git reset --hard HEAD^

# 特定のコミットを打ち消す新しいコミットを作成
git revert コミットID

誤ったブランチにコミットした場合

# 1. コミットを保存
git branch 正しいブランチ

# 2. 変更を元に戻す
git reset --hard HEAD~1  # 注意:コミット内容が正しいブランチに保存されていることを確認

# 3. 正しいブランチに切り替え
git checkout 正しいブランチ

マージコンフリクトの解決

# コンフリクトが発生した場合
git status  # コンフリクトファイルを確認

# ファイルを編集してコンフリクトを解決
# <<<<<<< HEAD
# 現在のブランチの変更
# =======
# マージするブランチの変更
# >>>>>>> ブランチ名

# 解決後にコミット
git add 解決したファイル
git commit  # または git merge --continue

リモートとの同期問題

# リモートからの変更と競合
git pull --rebase  # リモートの変更を取得し、ローカルの変更をリベース

# プッシュが拒否された場合
git pull
git push  # または
git push --force-with-lease  # 他の人の変更を上書きしないよう保護

削除したブランチの復元

# 削除したブランチの最後のコミットを見つける
git reflog

# 新しいブランチを作成して復元
git branch 復元ブランチ コミットID

巨大なリポジトリのパフォーマンス改善

# 部分クローン
git clone --filter=blob:none リポジトリURL  # ファイル内容なしでクローン
git clone --depth 1 リポジトリURL  # 浅いクローン(最新コミットのみ)

# リポジトリの最適化
git gc  # ガベージコレクション実行
git prune  # 到達不能なオブジェクトを削除

コミット歴史のクリーンアップ

# 不要なファイルを履歴から削除
git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch 大きなファイル' \
  --prune-empty -- --all

# リモートリポジトリに強制プッシュ(注意!)
git push origin --force --all

GitHubリポジトリのトラブル

# リモートURLの確認と変更
git remote -v
git remote set-url origin 新しいURL

# 認証の問題
# SSHキーの確認
ssh -T git@github.com

# HTTPSでのパスワード認証からトークン認証への移行
git remote set-url origin https://ユーザー名:パーソナルアクセストークン@github.com/ユーザー名/リポジトリ名.git

GitHub Actions のトラブル

  • ワークフローログの確認
  • シークレットと環境変数の正しい設定
  • ランナー環境の互換性確認
  • タイムアウト設定の調整
0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?