使用git worktree时git pull不拉取最新更改

db2dz4w8  于 2022-12-21  发布在  Git
关注(0)|答案(1)|浏览(215)

我喜欢git worktree,但总是遇到本地工作目录和远程分支不一样的情况,尽管git pull说"已经更新了"。
这是我做的一个小MRE:

  • 在GitLab Web界面中创建了远程存储库。
  • 使用git clone --bare <url>克隆了它
  • 使用git worktree add main在本地添加了main分支
  • 使用git worktree add new-branchcd添加了一个新分支,并执行了git push
  • 使用GitLab的Web界面,我直接在main分支中添加了一个文件main-branch-change-1,然后在新的main上重定了new-branch的基,然后在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

局部

hc8w905p

hc8w905p1#

使用git worktree add main在本地添加主分支
这是你的主要问题,当你运行git worktree add whatever时,git默认会创建一个新的分支whatever,并把它附加到新工作树的头上。* 这个新分支不会连接到任何远程节点上的任何分支,包括origin,即使碰巧有同名的分支。
如果您希望本地main分支跟踪origin/main,可以(并且在您的特定情况下必须)使用以下命令:

git branch --set-upstream-to=origin/main main

但是你对工作树(和裸仓库)的使用似乎有点奇怪,我强烈建议你在获得更多经验之前不要使用工作树。工作树非常适合使用git test,也可以作为git stash(我从来没有用过)的替代品1,但不能作为切换分支的替代品。
1我最近创建了一个临时的工作树,当我需要做其他事情时,我有一个交互式的重新定基,冲突正在进行,我不想放弃。

相关问题