付録E:便利なGitエイリアス集
エイリアスの設定方法
グローバル設定
# 個別に設定
git config --global alias.co checkout
git config --global alias.br branch
# 設定ファイルを直接編集
git config --global --edit
ローカル設定(プロジェクト別)
# 現在のリポジトリのみ
git config alias.st status
設定ファイルの場所
- グローバル:
~/.gitconfig
- ローカル:
.git/config
基本的なエイリアス
短縮系
[alias]
# 基本コマンドの短縮
co = checkout
br = branch
ci = commit
st = status
df = diff
dc = diff --cached
# よく使う組み合わせ
cob = checkout -b
cm = commit -m
ca = commit -am
# ステージング関連
a = add
aa = add .
ap = add -p
au = add -u
ステータス確認
[alias]
# 短縮ステータス
s = status -s
# ブランチ付きステータス
sb = status -sb
# 変更ファイルのみ表示
modified = ls-files -m
# 未追跡ファイルのみ表示
untracked = ls-files -o --exclude-standard
# ステージされたファイルのみ
staged = diff --cached --name-only
ログ表示系
美しいログ表示
[alias]
# カラフルなワンライン表示
l = log --pretty=format:'%C(yellow)%h%Creset %C(blue)%an%Creset %C(cyan)%cr%Creset %s' --graph
# 詳細付きログ
ll = log --pretty=format:'%C(yellow)%h%Creset %C(blue)%an%Creset %C(cyan)%cr%Creset %s' --graph --stat
# 最近のコミット
recent = log --pretty=format:'%C(yellow)%h%Creset %C(blue)%an%Creset %C(cyan)%cr%Creset %s' --graph -10
# 今日のコミット
today = log --since=midnight --pretty=format:'%C(yellow)%h%Creset %C(blue)%an%Creset %C(cyan)%cr%Creset %s'
# 特定期間のコミット
week = log --since='1 week ago' --pretty=format:'%C(yellow)%h%Creset %C(blue)%an%Creset %C(cyan)%cr%Creset %s'
コミット検索
[alias]
# コミットメッセージで検索
find = log --pretty=format:'%C(yellow)%h%Creset %C(blue)%an%Creset %C(cyan)%cr%Creset %s' --grep
# ファイル名で検索
track = log --follow --pretty=format:'%C(yellow)%h%Creset %C(blue)%an%Creset %C(cyan)%cr%Creset %s' --
# 変更内容で検索
search = log -S
# 作者で検索
author = "!f() { git log --author=\"$1\" --pretty=format:'%C(yellow)%h%Creset %C(blue)%an%Creset %C(cyan)%cr%Creset %s'; }; f"
ブランチ操作
ブランチ管理
[alias]
# ブランチ一覧(最終更新日付き)
branches = branch -a --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:blue)%(authorname)%(color:reset) (%(color:green)%(committerdate:relative)%(color:reset))'
# マージ済みブランチ
merged = branch --merged
# 未マージブランチ
unmerged = branch --no-merged
# リモートブランチ削除
delete-remote = push origin --delete
# ローカルのマージ済みブランチを削除
cleanup = "!git branch --merged | grep -v '\\*\\|main\\|master\\|develop' | xargs -n 1 git branch -d"
ブランチ切り替え
[alias]
# 最近のブランチに切り替え
prev = checkout @{-1}
# mainに切り替えてpull
main = !git checkout main && git pull origin main
# developに切り替えてpull
dev = !git checkout develop && git pull origin develop
# 対話的にブランチ選択(fzf必要)
coi = "!git branch | fzf | xargs git checkout"
コミット操作
コミット修正
[alias]
# 直前のコミットを修正
amend = commit --amend
# メッセージ変更なしで修正
amendno = commit --amend --no-edit
# 空コミット
empty = commit --allow-empty -m
# コミットをなかったことに(ファイルは保持)
uncommit = reset --soft HEAD~1
# コミットとファイル変更をなかったことに
discard = reset --hard HEAD~1
インタラクティブ操作
[alias]
# インタラクティブリベース
rebase-i = rebase -i
# 最近のn個のコミットをリベース
fixup = "!f() { git rebase -i HEAD~$1; }; f"
# コミットを1つにまとめる
squash = "!f() { git rebase -i HEAD~$1; }; f"
ML開発向けエイリアス
実験管理
[alias]
# 実験ブランチを作成
exp = "!f() { git checkout -b experiment/$1-$(date +%Y%m%d); }; f"
# 実験結果をコミット
experiment = "!f() { git add -A && git commit -m \"Experiment: $1\nResults: $2\"; }; f"
# モデルをコミット(LFS使用)
model-commit = "!f() { git lfs track \"*.pth\" \"*.h5\" \"*.onnx\" && git add .gitattributes && git add $1 && git commit -m \"Add model: $1\"; }; f"
# データセットの変更を記録
data-update = "!f() { git add data/ && git commit -m \"Update dataset: $1\"; }; f"
実験の比較
[alias]
# 2つの実験ブランチの差分
exp-diff = "!f() { git diff experiment/$1..experiment/$2 -- metrics/ results/; }; f"
# 実験結果のサマリー
exp-summary = "!git log --grep='Experiment:' --pretty=format:'%C(yellow)%h%Creset %C(cyan)%cr%Creset %s %C(green)%b%Creset' -10"
# メトリクスの変化を追跡
metrics = "!git log --follow --pretty=format:'%C(yellow)%h%Creset %C(cyan)%cr%Creset %s' -- metrics/"
統計・分析
コントリビューション統計
[alias]
# コントリビューター統計
contributors = shortlog -sn
# 今週のコントリビューション
stats = "!git log --author=\"$(git config user.name)\" --since='1 week ago' --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf \"Added: %s, Removed: %s, Total: %s\\n\", add, subs, loc }'"
# ファイル別の変更頻度
churn = "!git log --all -M -C --name-only --format='format:' \"$@\" | sort | grep -v '^$' | uniq -c | sort -n"
# 最も変更されているファイル
hotfiles = "!git log --pretty=format: --name-only | sort | uniq -c | sort -rg | head -20"
コードレビュー支援
[alias]
# PRレビュー用(ベースブランチとの差分)
review = "!f() { git diff $(git merge-base HEAD ${1:-main})..HEAD; }; f"
# レビュー対象ファイル一覧
review-files = "!f() { git diff --name-only $(git merge-base HEAD ${1:-main})..HEAD; }; f"
# コンフリクトファイルを表示
conflicts = diff --name-only --diff-filter=U
危険な操作(注意して使用)
履歴の書き換え
[alias]
# 特定のファイルを履歴から完全削除
remove-file = "!f() { git filter-branch --force --index-filter \"git rm --cached --ignore-unmatch $1\" --prune-empty --tag-name-filter cat -- --all; }; f"
# 作者情報を変更
change-author = "!f() { git filter-branch --env-filter 'export GIT_AUTHOR_NAME=\"$1\"; export GIT_AUTHOR_EMAIL=\"$2\"' --tag-name-filter cat -- --all; }; f"
# リモートを強制的に上書き
force-push = push --force-with-lease
ワークフロー支援
GitHub連携
[alias]
# PRを作成(GitHub CLI必要)
pr = "!gh pr create"
# Issueを作成
issue = "!gh issue create"
# 現在のブランチのPRを表示
show-pr = "!gh pr view"
# ブラウザで開く
browse = "!gh repo view --web"
日常のワークフロー
[alias]
# 作業開始(最新を取得してブランチ作成)
start = "!f() { git checkout main && git pull && git checkout -b $1; }; f"
# 作業完了(add, commit, push)
done = "!f() { git add -A && git commit -m \"$1\" && git push -u origin HEAD; }; f"
# 一時保存
wip = "!git add -A && git commit -m 'WIP: Work in progress'"
# 同期(pull → rebase → push)
sync = "!f() { git pull --rebase origin $(git branch --show-current) && git push; }; f"
カスタム関数エイリアス
高度な機能
[alias]
# ブランチをバックアップ
backup = "!f() { git branch backup/$(git branch --show-current)-$(date +%Y%m%d-%H%M%S); }; f"
# タグを作成してプッシュ
release = "!f() { git tag -a v$1 -m \"Release version $1\" && git push origin v$1; }; f"
# 特定のコミットまでリセット(確認付き)
reset-to = "!f() { echo \"Reset to $1? [y/N]\"; read answer; if [ \"$answer\" = \"y\" ]; then git reset --hard $1; fi; }; f"
# すべてのリモートから最新を取得
fetch-all = "!git remote | xargs -L1 git fetch --prune"
エイリアス設定例(.gitconfig)
[alias]
# === 基本短縮形 ===
co = checkout
br = branch
ci = commit
st = status
# === ログ表示 ===
l = log --pretty=format:'%C(yellow)%h%Creset %C(blue)%an%Creset %C(cyan)%cr%Creset %s' --graph
# === ブランチ操作 ===
cleanup = "!git branch --merged | grep -v '\\*\\|main\\|master\\|develop' | xargs -n 1 git branch -d"
# === ML開発 ===
exp = "!f() { git checkout -b experiment/$1-$(date +%Y%m%d); }; f"
# === 日常ワークフロー ===
sync = "!f() { git pull --rebase origin $(git branch --show-current) && git push; }; f"
使用例
# 実験を開始
git exp resnet50
# 作業完了
git done "Implement data augmentation"
# ログを美しく表示
git l
# マージ済みブランチをクリーンアップ
git cleanup
# 統計情報を表示
git stats
これらのエイリアスを活用することで、日常的なGit操作を大幅に効率化できます。プロジェクトやチームの慣習に合わせてカスタマイズしてください。