Git & GitHub Tips集:知っておくと便利なコマンド・操作まとめ
はじめに
日常のGit・GitHub操作で「これ知っておくと便利」なTipsをまとめます。基本コマンドは知っているけど、もう一歩踏み込んだ使い方を探している方向けです。
pull・fetch・rebase の違い
git pull とは
git pull は git fetch + git merge を一度に行うショートカットです。
git pull origin main # 上と同じ意味 git fetch origin main git merge origin/main
fetch + merge vs fetch + rebase
リモートの変更を取り込む方法は2つあります。
fetch + merge(デフォルト)
git fetch origin git merge origin/main
ローカルの変更とリモートの変更をマージコミットで統合します。
A---B---C (ローカル)
/ \
D---E---F---G---H (マージ後)
(リモート)
- 履歴にマージコミットが残る
- 作業の並行性がそのまま記録される
- コンフリクトは1回だけ解決すれば済む
fetch + rebase
git fetch origin git rebase origin/main
ローカルのコミットをリモートの最新コミットの上に「積み直し」ます。
A'--B'--C' (rebase後のローカル)
/
D---E---F---G (リモート)
- 履歴が一直線になる(マージコミットが残らない)
git logが見やすくなる- コンフリクトがある場合はコミットごとに解決が必要
pull --rebase
git pull --rebase origin main
fetch + rebase を一度に行います。チームで「マージコミットを残さない」運用にしている場合に使います。デフォルト動作を変更するには:
git config --global pull.rebase true
どちらを使うか
| 状況 | 推奨 |
|---|---|
| チームの運用ルールがある | それに従う |
| 履歴を一直線に保ちたい | rebase |
| 並行作業の経緯を残したい | merge |
| 共有ブランチ(main等)への取り込み | merge |
| 個人の作業ブランチの更新 | rebase |
共有ブランチにプッシュ済みのコミットを rebase すると他の人の履歴と食い違うため、自分だけが使っているブランチにのみ rebase を使うのが基本です。
ブランチ管理
マージ済みブランチを一括削除する
main にマージ済みのローカルブランチを一括で削除します。
git branch --merged main | grep -v '^\*\|main\|master\|develop' | xargs git branch -d
git branch --merged main—mainにマージ済みのブランチ一覧を取得grep -v—main・master・develop・現在のブランチ(*)を除外xargs git branch -d— 残ったブランチを削除(-dは安全削除。未マージなら失敗する)
リモートのマージ済みブランチを削除する場合:
git push origin --delete <branch-name>
GitHub上でPRマージ時に「Delete branch」を設定しておくと自動削除されます。
リモートで削除されたブランチをローカルから掃除する
git fetch --prune # または git remote prune origin
GitHub上で削除済みのリモートブランチへの参照が残っている場合に使います。--prune を毎回付けるのが面倒なら設定で自動化できます。
git config --global fetch.prune true
ブランチ名を変更する
# 現在のブランチ名を変更 git branch -m 新しい名前 # 別のブランチ名を変更 git branch -m 古い名前 新しい名前
コミット操作
直前のコミットメッセージを修正する
git commit --amend -m "修正後のメッセージ"
まだ push していないコミットにのみ使います。push 済みのコミットを amend すると履歴が書き換わります。
直前のコミットにファイルを追加する
git add 追加ファイル git commit --amend --no-edit # メッセージはそのまま
コミットを分割・まとめる(インタラクティブrebase)
git rebase -i HEAD~3 # 直近3コミットを操作
エディタが開き、各コミットに対して操作を選べます。
| コマンド | 意味 |
|---|---|
pick |
そのまま使う |
reword |
メッセージを書き換える |
squash |
前のコミットにまとめる |
fixup |
squashと同じだがメッセージは破棄 |
drop |
コミットを削除 |
特定のコミットだけ別ブランチに持ってくる
git cherry-pick <commit-hash>
変更の退避
作業中の変更を一時退避する(stash)
git stash # 退避 git stash pop # 復元して削除 git stash apply # 復元して残す git stash list # 一覧 git stash drop # 最新のstashを削除
未追跡ファイル(git add していないファイル)も含めて退避する:
git stash -u
名前を付けて退避する:
git stash push -m "作業中: ログイン機能"
git stash apply stash@{0}
ログ・差分の確認
ログを見やすく表示する
git log --oneline --graph --decorate --all
エイリアスに登録しておくと便利です:
git config --global alias.lg "log --oneline --graph --decorate --all" git lg
特定のファイルの変更履歴を見る
git log --follow -p articles/git-github-tips.md
特定の文字列を含むコミットを探す
git log -S "検索したい文字列"
ブランチ間の差分を確認する
git diff main..feature/my-branch git diff main...feature/my-branch # 分岐点からの差分
誤操作のリカバリ
変更を取り消す
# ステージングを取り消す(ファイルは残る) git restore --staged <file> # ワーキングツリーの変更を取り消す(元に戻す) git restore <file> # 全ファイルを直前のコミット状態に戻す git restore .
コミットを取り消す
# コミットを取り消してステージング状態に戻す(履歴は消える) git reset --soft HEAD~1 # コミットを取り消してワーキングツリーに戻す git reset HEAD~1 # コミットを完全に取り消す(変更も消える・要注意) git reset --hard HEAD~1
削除したブランチを復元する
git reflog # 操作履歴からハッシュを探す git checkout -b 復元ブランチ名 <hash>
reflog はローカルの全操作履歴を保持しており、--hard reset や誤削除からの復元に使えます。
.gitignore
グローバルな .gitignore を設定する
OS固有ファイル(.DS_Store、Thumbs.db)やエディタ設定をリポジトリごとに書かなくて済みます。
git config --global core.excludesfile ~/.gitignore_global
# ~/.gitignore_global .DS_Store .idea/ .vscode/ *.swp
既に追跡しているファイルを .gitignore で除外する
git rm --cached <file>
.gitignore に追加しただけでは、すでに追跡中のファイルは除外されません。
GitHub CLI(gh)
# PRを作成する gh pr create --title "タイトル" --body "説明" # PRの一覧を見る gh pr list # PRをブラウザで開く gh pr view --web # Issueを作成する gh issue create --title "タイトル" # リポジトリをクローンする gh repo clone user/repo # ワークフローの実行状況を確認する gh run list gh run view
まとめ
| やりたいこと | コマンド |
|---|---|
| マージ済みブランチ一括削除 | git branch --merged main | grep -v '^\*|main' | xargs git branch -d |
| リモート削除済みブランチの掃除 | git fetch --prune |
| 変更を退避 | git stash |
| 退避を復元 | git stash pop |
| 直前のコミット修正 | git commit --amend |
| 変更を取り消す | git restore <file> |
| 操作履歴を見る | git reflog |
| ログをグラフ表示 | git log --oneline --graph --decorate --all |
| PRを作成 | gh pr create |
特定文字列を変更したコミット・PRを追跡する方法は「GitHubで特定文字列を変更したコミットとPRを特定する方法:git log -S の使い方」を参照してください。
PRやIssueの絞り込みには「GitHub PRとIssueのフィルター検索:is:merged is:openまとめ」も参照してください。