使用git worktree时git pull无法拉取最新变更的问题求助
问题
我习惯用git worktree,但经常碰到本地工作目录和远程分支不一致的情况——明明执行git pull时提示“Already up to date”,但本地就是没同步最新变更。
复现步骤:
- 在GitLab网页端创建远程仓库;
- 用
git clone --bare <url>克隆仓库; - 通过
git worktree add main在本地添加main分支工作树; - 用
git worktree add new-branch添加新分支,进入该目录后执行git push; - 在GitLab网页端,直接在main分支添加文件
main-branch-change-1,将new-branch基于新的main分支变基,随后在new-branch添加文件feature-branch-change-1; - 在本地new-branch目录执行
git pull提示“Already up to date”,但提交哈希和git log显示本地未更新:main-branch-change-1存在,但feature-branch-change-1缺失; - 在裸仓库执行
git fetch --all后,再在new-branch执行git pull还是没变化; - 在main分支执行
git pull后,再在new-branch执行git pull仍然无变化。
相关截图:
- GitLab提交图

- 远程new-branch内容

- 本地状态

解决方法
核心原因是远程new-branch被变基重写了历史,本地分支指针仍指向旧提交,git pull默认的合并逻辑无法处理这种历史不一致的情况,按以下步骤操作即可同步:
切换到new-branch工作目录,先备份当前分支(可选但推荐,防止意外):
git branch new-branch-backup强制拉取远程分支的最新状态,覆盖本地分支:
git fetch origin new-branch:new-branch这条命令会直接将本地new-branch分支重置为远程
origin/new-branch的最新状态,跳过合并检查。验证同步结果:
git log --oneline查看提交记录是否和远程一致,同时检查文件是否包含
feature-branch-change-1。
如果后续需要频繁处理被远程变基的分支,可在拉取时添加--force参数(需确保本地无未提交变更):
git pull origin new-branch --force
注意:git worktree的所有工作树共享同一个裸仓库的本地数据,因此在裸仓库执行git fetch --all是正确操作,但因分支历史被重写,普通pull无法自动同步,必须用强制重置的方式。
内容的提问来源于stack exchange,提问作者Daniel Hjertholm
相关产品推荐
相关产品推荐

