|
1 | 1 | set -e |
2 | 2 |
|
| 3 | +# Check if local branch is behind remote and block push if so |
| 4 | +BRANCH=$(git rev-parse --abbrev-ref HEAD) |
| 5 | +REMOTE="origin" |
| 6 | + |
| 7 | +# Fetch latest from remote (only refs, no objects - much faster) |
| 8 | +git fetch --depth=1 --no-tags $REMOTE $BRANCH 2>/dev/null || true |
| 9 | + |
| 10 | +# Check if remote branch exists |
| 11 | +if git rev-parse --verify $REMOTE/$BRANCH >/dev/null 2>&1; then |
| 12 | + LOCAL=$(git rev-parse HEAD) |
| 13 | + REMOTE_HEAD=$(git rev-parse $REMOTE/$BRANCH) |
| 14 | + BASE=$(git merge-base HEAD $REMOTE/$BRANCH) |
| 15 | + |
| 16 | + if [ "$LOCAL" != "$REMOTE_HEAD" ] && [ "$BASE" = "$LOCAL" ]; then |
| 17 | + echo "" |
| 18 | + echo "ERROR: Your branch '$BRANCH' is behind '$REMOTE/$BRANCH'." |
| 19 | + echo "" |
| 20 | + echo "Please run: git pull --rebase" |
| 21 | + echo "" |
| 22 | + echo "This will replay your commits on top of the latest remote commits." |
| 23 | + echo "If there are conflicts, resolve them and run: git rebase --continue" |
| 24 | + echo "" |
| 25 | + exit 1 |
| 26 | + fi |
| 27 | + |
| 28 | + if [ "$LOCAL" != "$REMOTE_HEAD" ] && [ "$BASE" = "$REMOTE_HEAD" ]; then |
| 29 | + # Local is ahead, this is fine - we're pushing new commits |
| 30 | + : |
| 31 | + elif [ "$LOCAL" != "$REMOTE_HEAD" ] && [ "$BASE" != "$LOCAL" ] && [ "$BASE" != "$REMOTE_HEAD" ]; then |
| 32 | + echo "" |
| 33 | + echo "ERROR: Your branch '$BRANCH' has diverged from '$REMOTE/$BRANCH'." |
| 34 | + echo "" |
| 35 | + echo "Please run: git pull --rebase" |
| 36 | + echo "" |
| 37 | + echo "This will replay your commits on top of the latest remote commits." |
| 38 | + echo "If there are conflicts, resolve them and run: git rebase --continue" |
| 39 | + echo "" |
| 40 | + exit 1 |
| 41 | + fi |
| 42 | +fi |
| 43 | + |
| 44 | +# --- UNCOMMENT BELOW FOR AUTO-REBASE (instead of manual check above) --- |
| 45 | +# # Automatically run git pull --rebase if behind remote |
| 46 | +# BRANCH=$(git rev-parse --abbrev-ref HEAD) |
| 47 | +# REMOTE="origin" |
| 48 | +# |
| 49 | +# git fetch --depth=1 --no-tags $REMOTE $BRANCH 2>/dev/null || true |
| 50 | +# |
| 51 | +# if git rev-parse --verify $REMOTE/$BRANCH >/dev/null 2>&1; then |
| 52 | +# LOCAL=$(git rev-parse HEAD) |
| 53 | +# REMOTE_HEAD=$(git rev-parse $REMOTE/$BRANCH) |
| 54 | +# BASE=$(git merge-base HEAD $REMOTE/$BRANCH) |
| 55 | +# |
| 56 | +# if [ "$LOCAL" != "$REMOTE_HEAD" ] && [ "$BASE" != "$REMOTE_HEAD" ]; then |
| 57 | +# echo "" |
| 58 | +# echo "Your branch is behind or has diverged. Running git pull --rebase..." |
| 59 | +# echo "" |
| 60 | +# if ! git pull --rebase $REMOTE $BRANCH; then |
| 61 | +# echo "" |
| 62 | +# echo "ERROR: Rebase failed due to conflicts." |
| 63 | +# echo "Please resolve conflicts and run: git rebase --continue" |
| 64 | +# echo "Then try pushing again." |
| 65 | +# echo "" |
| 66 | +# exit 1 |
| 67 | +# fi |
| 68 | +# echo "" |
| 69 | +# echo "Rebase successful. Continuing with push..." |
| 70 | +# echo "" |
| 71 | +# fi |
| 72 | +# fi |
| 73 | +# --- END AUTO-REBASE --- |
| 74 | + |
3 | 75 | pnpm lint |
4 | 76 | pnpm build |
0 commit comments