git-sync: pull 失败时提示 pull.rebase=true 场景的绕过方法

This commit is contained in:
2026-09-14 18:55:00 +08:00
parent bd77c48829
commit d3802c3569
2 changed files with 8 additions and 0 deletions

View File

@@ -75,4 +75,5 @@ metadata:
- sync 检测到 unmerged paths(`git ls-files -u`)会直接拒绝提交,先解决冲突
- `resolve remote`(`git reset --hard`)与 `resolve local`(force push)都会丢内容,必须先经 clarify 拿到用户明确选择,脚本侧再加 `GIT_SYNC_CONFIRM=yes`
- push 失败(码 3)通常是 pull 后又有人推了东西:重新 `status`,再走分叉决策
- **`pull.rebase=true` 的仓库**(本机 nexus 即如此):有未暂存改动时 ff-only pull 必失败报 "cannot pull with rebase",哪怕与远端无文件重叠——先用 `git diff --name-only HEAD origin/main` 确认无重叠,再 `git -c pull.rebase=false pull --ff-only`,不必惊动用户。脚本遇此会自动打印 hint
- 脚本由其他技能/agent 复用时同样适用,别只当本技能专用

View File

@@ -58,6 +58,11 @@ status_cmd() {
exit 0
}
rebase_hint() {
[ "$(git config pull.rebase 2>/dev/null || true)" = "true" ] \
&& echo " hint: 本仓库 pull.rebase=true — 若本地改动与远端无文件重叠(git diff --name-only HEAD origin/main 为空交集),可用: git -c pull.rebase=false pull --ff-only" >&2
}
pull_ff() {
local AHEAD BEHIND
read -r AHEAD BEHIND < <(ahead_behind)
@@ -69,6 +74,7 @@ pull_ff() {
echo "==> git pull --ff-only origin $BRANCH"
if ! git pull --ff-only origin "$BRANCH" 2>&1; then
echo "CONFLICT: pull 失败 — 本地未提交改动与远端更新冲突,或需要 merge" >&2
rebase_hint
exit 4
fi
git log -1 --format='pulled: %h %s'
@@ -97,6 +103,7 @@ sync_cmd() {
echo "==> pull --ff-only origin $BRANCH"
if ! git pull --ff-only origin "$BRANCH" 2>&1; then
echo "CONFLICT: pull 失败 — 本地未提交改动与远端更新冲突" >&2
rebase_hint
exit 4
fi
fi