我对git比较新。我正在使用bitbucket作为我的远程存储库。尝试将我的所有分支转换为标签后,我处于一个混乱的状态。我在bitbucket上的状态我有与分支同名的标签。我想删除无关的远程分支。
在当地,我有我想要的东西:
> git branch
* master
> git tag
1.1.0
1.2.0
1.3.0
1.3.1
1.3.2
2.0.1
到目前为止一切顺利。
然而,在bitbucket上,我有:
分支:
1.1.0
1.2.0
1.3.0
1.3.1
1.3.2
2.0.1
master
标记:
1.1.0
1.2.0
1.3.0
1.3.1
1.3.2
2.0.1
我想删除除master之外的所有远程分支。我该怎么做?
感谢。
答案 0 :(得分:2)
git branch -m old_branch new_branch # Rename branch locally
git push origin :old_branch # Delete the old branch
git push --set-upstream origin new_branch # Push the new branch, set local branch to track the new remote
答案 1 :(得分:1)
要删除远程对象,您必须不对其进行任何操作 - 例如,
git push origin :master
将删除任何名为" master"在远程存储库中。
现在的事实是"主人"这里只是快捷方式,用于该引用的完整真实姓名,即" refs / heads / master"。标签位于" refs / tags"命名空间,所以如果你碰巧同时拥有一个名为" foo"的分支和标签。在远程存储库中,您可以使用要删除的对象的全名来消除任何歧义。
血腥细节详见gitrevisions(7)
manual page。
因此,要删除除master之外的所有远程分支,您必须执行以下操作:
git push origin :refs/heads/1.1.0 :refs/heads/1.2.0 ...
你可以尝试通过采用一些小的黑客来减少乏味:
$ ( while read b; do echo :refs/heads/$b; done | xargs git push origin )
1.1.0
1.2.0
1.3.0
1.3.1
1.3.2
2.0.1
^D
(^ D这里的意思是按ctrl-d
表示子shell的输入结束。)
P.S。 顺便说一句,我认为,因为Git在提取时支持通配符refspecs,比如
git fetch origin '+refs/heads/*:refs/heads/*'
也适用于推动。但似乎它没有 - 至少
git push origin ':refs/tags/*'
使用Git 1.8.1 对我来说似乎不起作用。
答案 2 :(得分:0)
删除远程分支/标记的语法是:
git push REMOTE_NAME :BRANCH_NAME
如果标签或分支具有相同的名称,我不确定它们是否具有首选项。
更具体地说,您可以使用refs/heads
refspec说明符指定它是一个分支:
git push REMOTE_NAME :refs/heads/BRANCH_NAME
假设您的遥控器名为origin
,此命令应删除您提到的所有分支:
for branch_name in 1.1.0 1.2.0 1.3.0 1.3.1 1.3.2 2.0.1; do
git push origin :refs/heads/$branch_name
done