Open2
開発中のブランチがそこそこの大きさになっちゃったけどテストファイルとかのリファクタだけ先にマージしたいときのツール
#!/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"
利用のイメージ
PATHを通したあと、
git-pick-pr -m "[testing] 基底テストクラスの更新" src/tests/Lib/BaseTestCase.php