メインブランチ(main/master)に移動して最新の状態に更新します。
Switches to main/master branch, pulls latest changes, and restores your work.
/plugin marketplace add Doarakko/dotfiles/plugin install doarakko-doarakko-config-claude@Doarakko/dotfilesメインブランチ(main/master)に移動して最新の状態に更新します。
/branch-main
#!/bin/bash
# メインブランチ名を検出する関数
detect_main_branch() {
# リモートのメインブランチを確認
if git ls-remote --heads origin main >/dev/null 2>&1; then
echo "main"
elif git ls-remote --heads origin master >/dev/null 2>&1; then
echo "master"
else
# ローカルで確認
if git show-ref --verify --quiet refs/heads/main; then
echo "main"
elif git show-ref --verify --quiet refs/heads/master; then
echo "master"
else
echo ""
fi
fi
}
# 現在のブランチ名を取得
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
# メインブランチ名を検出
MAIN_BRANCH=$(detect_main_branch)
if [ -z "$MAIN_BRANCH" ]; then
echo "❌ メインブランチ(main/master)が見つかりません"
echo ""
echo "💡 以下を確認してください:"
echo "- git remote -v でリモート設定を確認"
echo "- git branch -a でブランチ一覧を確認"
exit 1
fi
echo "🔄 メインブランチ更新処理を開始します"
echo ""
echo "📌 現在のブランチ: $CURRENT_BRANCH"
echo "🎯 メインブランチ: $MAIN_BRANCH"
# 作業ツリーに変更があるか確認
STASH_NEEDED=false
if ! git diff-index --quiet HEAD -- 2>/dev/null || [ -n "$(git ls-files --others --exclude-standard)" ]; then
echo ""
echo "📝 未コミットの変更を検出しました"
echo ""
echo "💡 変更内容:"
git status --short
echo ""
echo "🔄 変更を一時保存(stash)します..."
# stashにメッセージ付きで保存
STASH_MSG="Auto-stash by branch-main command from $CURRENT_BRANCH"
if git stash push -m "$STASH_MSG" --include-untracked; then
STASH_NEEDED=true
echo "✅ 変更を一時保存しました"
else
echo "❌ 変更の一時保存に失敗しました"
exit 1
fi
fi
# 既にメインブランチにいる場合
if [ "$CURRENT_BRANCH" = "$MAIN_BRANCH" ]; then
echo ""
echo "✅ 既に$MAIN_BRANCH ブランチにいます"
else
# メインブランチに切り替え
echo ""
echo "🔀 $MAIN_BRANCH ブランチに切り替え中..."
if ! git checkout $MAIN_BRANCH; then
echo "❌ ブランチの切り替えに失敗しました"
exit 1
fi
echo "✅ $MAIN_BRANCH ブランチに切り替えました"
fi
# 最新の変更を取得
echo ""
echo "🌐 リモートから最新の変更を取得中..."
echo ""
if git pull origin $MAIN_BRANCH; then
echo ""
echo "✅ メインブランチの更新が完了しました!"
echo ""
# 更新後の状態を表示
echo "📊 更新後の状態:"
echo "- ブランチ: $MAIN_BRANCH"
echo "- 最新コミット: $(git log -1 --pretty=format:'%h - %s')"
# 元のブランチとの差分を表示(異なるブランチから来た場合)
if [ "$CURRENT_BRANCH" != "$MAIN_BRANCH" ]; then
echo ""
echo "📝 元のブランチ ($CURRENT_BRANCH) との差分:"
COMMITS_DIFF=$(git rev-list --count $CURRENT_BRANCH..$MAIN_BRANCH)
if [ "$COMMITS_DIFF" -gt 0 ]; then
echo "- $MAIN_BRANCH の方が $COMMITS_DIFF コミット進んでいます"
else
echo "- 差分はありません"
fi
echo ""
echo "💡 元のブランチに戻るには: git checkout $CURRENT_BRANCH"
fi
# stashした変更を復元
if [ "$STASH_NEEDED" = true ]; then
echo ""
echo "🔄 一時保存した変更を復元中..."
if git stash pop; then
echo "✅ 変更を復元しました"
echo ""
echo "📝 復元された変更:"
git status --short
else
echo "⚠️ 変更の復元中にコンフリクトが発生しました"
echo ""
echo "💡 手動で解決してください:"
echo "1. コンフリクトのあるファイルを編集"
echo "2. git add <ファイル名> でステージング"
echo "3. git stash drop で不要なstashを削除"
echo ""
echo "📋 stashリストを確認: git stash list"
fi
fi
else
echo ""
echo "❌ 更新中にエラーが発生しました"
echo ""
echo "💡 以下を確認してください:"
echo "- インターネット接続"
echo "- リモートリポジトリへのアクセス権限"
echo "- コンフリクトの有無"
# コンフリクトがある場合
if git status | grep -q "You have unmerged paths"; then
echo ""
echo "⚠️ マージコンフリクトが発生しています"
echo ""
echo "🔧 コンフリクトのあるファイル:"
git diff --name-only --diff-filter=U
echo ""
echo "📝 解決手順:"
echo "1. 上記のファイルを編集してコンフリクトを解決"
echo "2. git add <ファイル名> で解決済みファイルをステージング"
echo "3. git commit でマージを完了"
fi
# エラーが発生してもstashした変更を復元
if [ "$STASH_NEEDED" = true ]; then
echo ""
echo "🔄 一時保存した変更を復元中..."
if git stash pop; then
echo "✅ 変更を復元しました"
else
echo "⚠️ 変更の復元中にコンフリクトが発生しました"
echo "📋 stashリストを確認: git stash list"
fi
fi
exit 1
fi
echo ""
echo "💡 次のステップ:"
echo "- ブランチ一覧を確認: git branch"
echo "- 新しいブランチを作成: git checkout -b feature/new-feature"
echo "- 特定のブランチに切り替え: git checkout <ブランチ名>"
/branch-create: 新しいブランチを作成/branch-switch: ブランチを切り替え/commit: 変更をコミット/push-current: 現在のブランチをプッシュ