你的需求是希望 自动拉取所有远程分支,并且在分支间存在冲突时 自动覆盖本地内容(不保留差异)。以下是优化后的解决方案:
最终解决方案(全自动强制覆盖)
git fetch --all && for branch in $(git branch -r | grep -vE "HEAD|master|main"); do
local_branch=${branch#origin/}
# 强制删除已存在的本地分支(如果有)
git branch -D "$local_branch" 2>/dev/null
# 强制创建分支并覆盖本地文件
git checkout -B "$local_branch" "$branch" --no-track --force
done
关键参数说明:
参数 | 作用 |
---|---|
-D |
强制删除本地分支(无论是否有未提交修改) |
-B |
强制创建/重置分支(相当于 -b + --force ) |
--force |
强制覆盖本地文件(忽略所有冲突) |
2>/dev/null |
屏蔽错误输出(如分支不存在的警告) |
注意事项
-
数据风险
此操作会无条件覆盖本地文件,确保:- 不需要保留任何本地修改
- 已提交的重要更改已推送到远程
-
二进制文件问题
如果遇到文件权限错误(如之前的ota_*.bin
),先执行清理:git reset --hard && git clean -fd
-
跳过特定分支
如需排除更多分支(如dev
),修改grep -vE
部分: