我有一个看似过时的git索引。我在两台机器上开发。在一台计算机上,我使用git push origin :testbranch
和git branch -D testbranch
删除了几乎所有远程分支。这很有效,当我发出git branch -a
时,我得到了这个:
* master
remotes/origin/HEAD -> origin/master
然后我来到我的另一台机器并执行git pull
,它没有更新索引并打印出我在另一台机器上删除的所有旧分支:git branch -a
:
* master
remotes/origin/add_area_to_locations
remotes/origin/captcha_test
remotes/origin/full_responsive
remotes/origin/master
remotes/origin/pony_responsive
remotes/origin/shu_responsive
remotes/origin/usmle_cart
remotes/origin/yorgo_responsive
然后我谷歌周围,并且无法找到每个说法的索引更新功能。我尝试了git update-index --really-refresh
和git update-index --refresh
,但似乎没有做任何事情。只是为了仔细检查遥控器上的什么,我重新克隆了回购,确定回购没有分支,并且我想要它是干净的。
但问题仍然存在 - 如何更新我的本地索引,以便准确反映主源回购中的内容?我不想克隆一个回购只是为了清理索引。
非常感谢!
答案 0 :(得分:2)
你需要这样做:
git fetch -p
-p, - prune
获取后,删除遥控器上不再存在的所有远程跟踪引用。标签不受修剪,如果他们 仅由于默认标记自动跟踪或由于a而被提取 --tags选项。但是,如果由于显式refspec(在命令行或远程配置中,为...)提取标记 例如,如果使用--mirror选项克隆远程,则为它们 也需要修剪。
这意味着在获取之后,它将删除遥控器上不再存在的任何远程跟踪分支。
答案 1 :(得分:0)
git pull
通常只提取您要拉出的分支,因此您必须单独拉出每个分支。如果您只想更新远程分支,则应使用git fetch
。使用--prune
选项(或简称为-p
),您可以使git fetch
除去从远程执行的所有远程分支:
git fetch -p
这样做会消除你从遥控器上移除的所有分支。
最后,关于你对“索引”的使用:在Git中,索引也称为“临时区域”。它是添加更改的中间位置(使用git add
或git rm
等命令),然后包含在下一次提交中。您将对索引的更改添加到为下一次提交暂存它们(因此名称为“暂存区域”)。其中包含“index”的所有命令都可能引用此命令,而不是某些lookup index。