我在想,
git push --prune
能否像相反方向的 git remote prune origin
一样清理远程分支。这是文档所说的作用:--prune
Remove remote branches that don’t have a local counterpart. For example a remote branch tmp will be removed if a local branch with the same name doesn’t exist any more.
但是我对上面所说的“counterpart”是什么有些困惑。让我通过一个例子来解释一下我的意图。
让我们创建一个远程跟踪分支,如下所示:
$ git checkout -b my-feature-branch && git push -u origin my-feature-branch
...
Branch 'my-feature-branch' set up to track remote branch 'my-feature-branch' from 'origin'.
我的理解是,my-feature-branch
就是文档所指的 本地副本
。
现在按照以下方式删除这个本地副本:
$ git branch -D my-feature-branch
Deleted branch my-feature-branch (was f7404b0).
如果我运行以下命令git push --prune
,我期望它可以删除远程分支:
$ git push --prune origin
Everything up-to-date
但是,即使本地分支已经不存在,git push --prune
仍然拒绝删除远程分支。虽然我知道可以使用git push -d origin my-feature-branch
来删除远程分支,但是我想了解git push --prune
是否也能做到同样的效果。
git push --prune origin refs/heads/*
能够工作,但是git push --prune origin refs/remotes/origin/*
却不能? - akostadinovgit push
(通常)用于在远程设置分支名称;refs/remotes/origin/*
是远程跟踪名称。这就是为什么:在origin
上的Git以正常方式使用,因此它需要在此处使用分支名称。 - torek