Git

ブランチ操作

Git

branch、checkout、merge、rebase

ブランチの基本

作成、切り替え、削除

branches.sh bash
# ブランチ一覧
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

merge.sh bash
# ブランチをマージ(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

rebase.sh bash
# 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:  分岐の記録が残る(チームでは安全)