ブランチ操作
Git
branch、checkout、merge、rebase
ブランチの基本
作成、切り替え、削除
# ブランチ一覧
git branch # ローカル
git branch -r # リモート
git branch -a # 全て
# 作成と切り替え
git branch feature/login # 作成のみ
git checkout feature/login # 切り替え
git checkout -b feature/login # 作成 + 切り替え(旧来)
git switch -c feature/login # 作成 + 切り替え(推奨)
git switch main # 切り替えのみ
# ブランチ名変更
git branch -m old-name new-name
git branch -m new-name # 現在のブランチをリネーム
# 削除
git branch -d feature/login # マージ済みのみ削除
git branch -D feature/login # 強制削除
git push origin --delete feature/login # リモートブランチ削除マージ
fast-forward、no-ff、squash
# ブランチをマージ(mainに取り込む)
git switch main
git merge feature/login
# --no-ff: マージコミットを必ず作成
git merge --no-ff feature/login
# --squash: 全コミットを1つにまとめてステージング
git merge --squash feature/login
git commit -m "feat: ログイン機能を追加"
# コンフリクトの解決
git merge feature/login
# >>> コンフリクト発生 <<<
# ファイルを編集して解決
git add .
git merge --continue
# または中断:
git merge --abort
# マージ済みブランチの確認と一括削除
git branch --merged main
git branch --merged main | grep -v '\*\|main\|develop' | xargs git branch -dリベース
rebase、interactive rebase
# feature ブランチを main の最新に追従
git switch feature/login
git rebase main
# コンフリクト時
git rebase main
# >>> コンフリクト発生 <<<
git add .
git rebase --continue
# または中断:
git rebase --abort
# インタラクティブリベース(直近3コミットを整理)
git rebase -i HEAD~3
# エディタが開く:
# pick abc123 feat: ログイン追加
# squash def456 fix: タイポ修正 ← s に変更してsquash
# reword ghi789 wip: 作業中 ← r に変更してメッセージ編集
# drop jkl012 debug: console.log ← d に変更して削除
# rebase vs merge
# rebase: 履歴が線形になる(pushが必要なら --force-with-lease)
# merge: 分岐の記録が残る(チームでは安全)