#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" REMOTE="${GIT_REMOTE:-origin}" BRANCH="${GIT_BRANCH:-$(git branch --show-current)}" if [ -z "$BRANCH" ]; then echo "ERROR: 当前不是普通分支,不能在 detached HEAD 状态下提交。" >&2 exit 1 fi if [ -d .git/rebase-merge ] || [ -d .git/rebase-apply ] || [ -f .git/MERGE_HEAD ]; then echo "ERROR: 当前仓库存在未完成的 merge/rebase,请先处理后再执行。" >&2 exit 1 fi MESSAGE="${*:-}" if [ -z "$MESSAGE" ]; then MESSAGE="chore: update code $(date '+%Y-%m-%d %H:%M:%S')" fi echo "Repo: $(git rev-parse --show-toplevel)" echo "Branch: $BRANCH" echo "Remote: $REMOTE" echo "Msg: $MESSAGE" git add -A if git diff --cached --quiet; then echo "没有需要提交的修改。" exit 0 fi git commit -m "$MESSAGE" if git ls-remote --exit-code --heads "$REMOTE" "$BRANCH" >/dev/null 2>&1; then git fetch "$REMOTE" "$BRANCH" REMOTE_REF="refs/remotes/$REMOTE/$BRANCH" if git show-ref --verify --quiet "$REMOTE_REF"; then if ! git merge-base --is-ancestor "$REMOTE_REF" HEAD; then echo "远端 $REMOTE/$BRANCH 有本地没有的提交,开始 rebase。" git pull --rebase "$REMOTE" "$BRANCH" fi fi fi git push "$REMOTE" "HEAD:$BRANCH" echo "提交并推送完成:$(git rev-parse --short HEAD)"