⚒️
個人開発でGithubのPRが要らない場合のマージコマンド
個人開発の場合、GithubのPRいらなくない?
個人開発の場合、一人なので誰かにレビュー依頼することは多くの場合ないと思います。
そうであれば、ローカルでブランチをマージしてGithubにpushするだけでよいと思います。
この処理をスクリプトにしてgitのオリジナルコマンドにして実行する手順を整理します。
手順
- ローカルで作業ブランチをmainブランチにマージして、Githubにpushするスクリプト作成。
- 上記のスクリプトをgitのオリジナルコマンドとして使えるように設定する。
コマンド仕様
- コマンド実行時に、引数として、merget commitのメッセージを取得。
- コマンドは作業ブランチで実行し、マージするブランチ名を取得する。
- ブランチ名が取得できたら、mainブランチに切り替え。念の為、mainを最新化。
- ローカルにて作業ブランチをmainブランチにマージ。
- ローカルのmainブランチをGithubにpush。
処理スクリプト
- 作業ブランチをmainブランチにマージしてGithubにpushするスクリプト。
- gitのカスタムコマンドとして実行するためファイル名の接頭辞は「git-」にする。
- 例えば、「git-merge-to-main.sh」とする。
- マージの方法は以下の3つ方法があるが、サンプルスクリプトは「Merge commit」を採用している。
- a. Merge commit:コミット履歴を保持。
- b. Squash and merge:ブランチのコミットを1つにまとめてマージ。
- c. Rebase and merge:ブランチの各コミットを base 上に並べ直して、マージコミットを作らずに取り込む。
git-merge-to-main.sh
#!/usr/bin/env bash
# merge_to_main.sh
# 仕様:
# 1) 作業ブランチで実行。引数にマージコミットメッセージを受け取る
# 2) main に切替え、origin から差分取得
# 3) 取得した作業ブランチを --no-ff で main へマージ
set -euo pipefail
# 引数のメッセージを取得(任意指定。指定時のみmerge commitのメッセージに含める)
EXTRA_MSG="${1:-}"
# コマンドを実行したフォルダにgitのリポジトリが存在するか確認。なければ終了。
git rev-parse --is-inside-work-tree >/dev/null
# コマンドを実行した作業ブランチ名を取得
SRC_BRANCH="$(git rev-parse --abbrev-ref HEAD)"
[ "$SRC_BRANCH" != "main" ] || { echo "main で実行しない。作業ブランチで実行すること。"; exit 1; }
# 未コミット確認
git diff --quiet && git diff --cached --quiet || { echo "未コミット変更あり。コミットまたはstashして再実行。"; exit 1; }
echo "作業ブランチ: $SRC_BRANCH"
echo "base: main"
# 最新化
git fetch origin main
git checkout main
git pull --ff-only origin main
# マージメッセージ組み立て
BASE_MSG="Merged ${SRC_BRANCH} into main."
# 任意メッセージの有無でコマンド内容変更
if [ -n "$EXTRA_MSG" ]; then
# git の -m は複数指定で段落になる
git merge --no-ff "$SRC_BRANCH" -m "$BASE_MSG" -m " [$EXTRA_MSG]"
else
git merge --no-ff "$SRC_BRANCH" -m "$BASE_MSG"
fi
# 反映
git push origin main
# ローカル作業ブランチを削除
git branch -d "$SRC_BRANCH"
echo "done: merged '$SRC_BRANCH' into 'main' with a merge commit."
gitのオリジナルコマンド設定
1.スクリプトをフォルダに保存
スクリプトを保存した場所にパスを通す。
以下は、ユーザーホームに保存して、パスを通す例。
# ユーザーフォームにbinというスクリプトの保存先を作成
mkdir -p ~/bin
# スクリプトを上記のフォルダに格納
mv merge_to_main.sh ~/bin/git-merge-to-main
# 実行権限設定
chmod +x ~/bin/git-merge-to-main
2.パスの設定
.bashrc、または、.zshrcに以下を追記。
.bashrc
export PATH="$HOME/bin:$PATH"
パス設定を反映。
source ~/.bashrc
3. コマンド設定確認
以下のコマンドで、設定したコマンドが表示されればOK。
# 設定されていれば、merge-to-main が表示される
git help -a | grep merge-to-main
4.実行
以下の通り、gitコマンドの後に、「git-」を省いたスクリプト名を入力し、メッセージを付けて実行。
git merge-to-main "Merge branch 'feature-x'"
Discussion