|
@@ -0,0 +1,51 @@
|
|
|
|
|
+#!/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)"
|