当我在Git中使用bash自动完成时,它会不断向我展示我不再拥有的旧遥控器的分支.当我这样做时,git branch -la它会显示那些旧的遥控器和分支,而git branch -l不会.A ls .git/refs/remotes/也显示了它们.但是,它们不存在于我的.git/config中,并且在我运行时它们都没有显示git remote show.
那么我如何摆脱它们,因为我的自动完成列表现在太长了.
我已经尝试过了:
git reflog expire --expire=now --all
git gc --prune=now
rm .git/refs/remotes/theoldremote
git remote prune theoldremote
Run Code Online (Sandbox Code Playgroud)
我也知道我可以重新克隆回购但这只是作弊;-)
sle*_*ske 129
如果在远程存储库中删除了分支,Git不会自动删除(本地)远程跟踪分支.此外,在V2.0.1之前远程跟踪分支在某些情况下,当您从git配置中删除远程时,不会删除远程跟踪分支(请参阅VonC的答案).
要删除其中一个远程存储库的过时远程跟踪分支(在远程存储库中删除的分支),请运行
git remote prune <remote>
Run Code Online (Sandbox Code Playgroud)
引用手册页或git remote:
修剪
删除<name>下的所有陈旧跟踪分支.这些陈旧的分支已从<name>引用的远程存储库中删除,但仍在"remotes/<name>"中本地可用.
使用--dry-run选项,报告将修剪哪些分支,但实际上不要修剪它们.
但是,根据您的问题,您似乎手动删除了.git/refs/remotes/theoldremote,因此Git不再了解远程跟踪分支所属的远程存储库.这不是你应该怎么做的.
删除远程存储库的常规方法是运行
git remote rm <remote>
Run Code Online (Sandbox Code Playgroud)
这将从您.git/config的远程删除远程,并将删除远程跟踪分支.
如果你只删除下面的目录.git/refs/remotes/,分支将留在后面.然后您需要手动删除它们:
git branch -rd <remote>/<branchname>
Run Code Online (Sandbox Code Playgroud)
您需要-r删除远程分支的选项.
Mer*_*ert 16
我用
git push origin :remote_branch
Run Code Online (Sandbox Code Playgroud)
从服务器中删除分支.
git remote prune origin
Run Code Online (Sandbox Code Playgroud)
删除服务器上不存在的远程引用
注意:虽然git remote prune是答案,但要知道,从git 2.0.1开始(2014年6月25日),git remote rm 首先要删除远程跟踪分支.
所以希望,一个人不应该在一个之后清理旧的分支git remote rm.
remote rm:删除远程配置作为最后一个删除远程时,请删除远程跟踪分支,然后再删除远程配置.
这样,如果在删除远程跟踪分支时操作失败或中止,则可以重新运行该命令以完成操作.
但是如果你必须这样git fetch做,只要你先设定一个简单就足够了:
git config --global fetch.prune true
cd /path/to/repo
git config remote.origin.prune true
Run Code Online (Sandbox Code Playgroud)
不向分支推送任何内容即可将其删除:
git push remote :remote_branch
它在文档中的某个地方,但并不是很明显。
或者我误解了你的问题?
| 归档时间: |
|
| 查看次数: |
29154 次 |
| 最近记录: |