Open2

開発中のブランチがそこそこの大きさになっちゃったけどテストファイルとかのリファクタだけ先にマージしたいときのツール

meijinmeijin
#!/bin/bash

# エラーハンドリング
set -e

# デフォルトのコミットメッセージ
commit_message=""

# 引数チェックとオプション処理
while [[ "$#" -gt 0 ]]; do
    case "$1" in
        -m)
            shift
            commit_message="$1"
            ;;
        *)
            files+=("$1")
            ;;
    esac
    shift
done

# 引数が不足している場合エラー
if [ "${#files[@]}" -eq 0 ]; then
    echo "Usage: git-pick-pr [-m <commit-message>] <file1> [<file2> ...]"
    exit 1
fi

# 現在のブランチ名を取得
current_branch=$(git symbolic-ref --short HEAD)

# 新しいブランチ名を生成(ランダム6文字のサフィックスのみ)
random_suffix=$(head /dev/urandom | tr -dc 'a-z0-9' | head -c 6)
new_branch="${current_branch}-pick-${random_suffix}"

# Developブランチに移動して新しいブランチを作成
git checkout develop
git checkout -b "$new_branch"

# 指定されたファイルを現在のブランチからチェックアウト
for file in "${files[@]}"; do
    git checkout "$current_branch" -- "$file"
    git add "$file" # 指定されたファイルだけをステージング
done

# コミットメッセージを設定
if [ -z "$commit_message" ]; then
    commit_message="pick ${files[*]}"
fi

# コミットを作成
git commit -m "$commit_message"

# 新しいブランチをリモートにプッシュ
git push origin "$new_branch"

# PRを作成 (ghコマンドを利用)
gh pr create -B develop -t "$commit_message" -b "Picked the following files: ${files[*]}"

# 元のブランチに戻る
git checkout "$current_branch"

echo "Pull request created successfully! You are now back on branch: $current_branch"
echo "New branch created: $new_branch"

meijinmeijin

利用のイメージ

PATHを通したあと、

git-pick-pr -m "[testing] 基底テストクラスの更新" src/tests/Lib/BaseTestCase.php