| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #!/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)"
|