You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用git worktree时git pull无法拉取最新变更的问题求助

问题

我习惯用git worktree,但经常碰到本地工作目录和远程分支不一致的情况——明明执行git pull时提示“Already up to date”,但本地就是没同步最新变更。

复现步骤:

  1. 在GitLab网页端创建远程仓库;
  2. 用git clone --bare <url>克隆仓库;
  3. 通过git worktree add main在本地添加main分支工作树;
  4. 用git worktree add new-branch添加新分支,进入该目录后执行git push;
  5. 在GitLab网页端,直接在main分支添加文件main-branch-change-1,将new-branch基于新的main分支变基,随后在new-branch添加文件feature-branch-change-1;
  6. 在本地new-branch目录执行git pull提示“Already up to date”,但提交哈希和git log显示本地未更新:main-branch-change-1存在,但feature-branch-change-1缺失;
  7. 在裸仓库执行git fetch --all后,再在new-branch执行git pull还是没变化;
  8. 在main分支执行git pull后,再在new-branch执行git pull仍然无变化。

相关截图:

  • GitLab提交图
    GitLab提交图
  • 远程new-branch内容
    远程new-branch内容
  • 本地状态
    本地状态
解决方法

核心原因是远程new-branch被变基重写了历史,本地分支指针仍指向旧提交,git pull默认的合并逻辑无法处理这种历史不一致的情况,按以下步骤操作即可同步:

  1. 切换到new-branch工作目录,先备份当前分支(可选但推荐,防止意外):

    git branch new-branch-backup
    
  2. 强制拉取远程分支的最新状态,覆盖本地分支:

    git fetch origin new-branch:new-branch
    

    这条命令会直接将本地new-branch分支重置为远程origin/new-branch的最新状态,跳过合并检查。

  3. 验证同步结果:

    git log --oneline
    

    查看提交记录是否和远程一致,同时检查文件是否包含feature-branch-change-1。

如果后续需要频繁处理被远程变基的分支,可在拉取时添加--force参数(需确保本地无未提交变更):

git pull origin new-branch --force

注意:git worktree的所有工作树共享同一个裸仓库的本地数据,因此在裸仓库执行git fetch --all是正确操作,但因分支历史被重写,普通pull无法自动同步,必须用强制重置的方式。

内容的提问来源于stack exchange,提问作者Daniel Hjertholm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 17:35:21