简短回答
如果您想要更详细的以下命令解释,请查看下一节中的长回答。
删除远程分支
git push origin --delete <branch>
git push origin -d <branch>
git push origin :<branch>
刪除本地分支
git branch --delete <branch>
git branch -d <branch>
git branch -D <branch>
删除本地远程跟踪分支
git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch>
git fetch <remote> --prune
git fetch <remote> -p
长答案:
删除分支时,有三个不同的分支需要处理!
当你要删除本地和远程分支时,请记住涉及到三个不同的分支:
- 本地分支
X
。
- 远程源分支
X
。
- 本地跟踪远程分支
origin/X
,用于跟踪远程分支 X
。
![Visualization of three branches](https://istack.dev59.com/NLAqw.webp)
原帖作者使用了:
git branch -rd origin/bugfix
他仅删除了本地的远程追踪分支 origin/bugfix,而没有删除实际的远程分支 origin
上的 bugfix
分支。
![Diagram 2](https://istack.dev59.com/iCOnz.webp)
要删除远程分支,你需要
git push origin --delete bugfix
![Diagram 3](https://istack.dev59.com/6Z3GY.webp)
附加细节
以下部分描述了在删除远程和远程跟踪分支时需要考虑的其他细节。
推送以删除远程分支也会删除远程跟踪分支
请注意,使用git push
命令行从远程分支X
中删除也将删除本地远程跟踪分支origin/X
,因此不必使用git fetch --prune
或git fetch -p
修剪过时的远程跟踪分支。但是,如果您这样做,也不会有任何损失。
您可以通过运行以下命令来验证已删除远程跟踪分支origin/X
:
git branch --remotes
git branch -r
git branch --all
git branch -a
修剪过时的本地远程跟踪分支 origin/X
如果您没有像上面那样从命令行删除远程分支 X
,则您的本地存储库仍将包含(现在已过时的)远程跟踪分支 origin/X
。例如,如果您直接通过 GitHub 的 Web 接口删除了远程分支,则可能会发生这种情况。
自 Git 版本 1.6.6 以来,删除这些过时的远程跟踪分支的典型方法是简单地使用 --prune
或更短的 -p
运行 git fetch
。 请注意,这将删除所有不再存在于远程的远程分支的过时本地远程跟踪分支:
git fetch origin --prune
git fetch origin -p
以下是来自1.6.6版本发布说明的相关引用(重点在于我):
"git fetch" 学会了 --all
和 --multiple
选项,可以从多个仓库运行fetch,并使用--prune
选项删除已过期的远程跟踪分支。 这使得 "git remote update" 和 "git
remote prune" 不再必要(尽管没有计划删除 "remote update" 或 "remote prune")。
清除过时的远程跟踪分支的替代方法
或者,您可以通过使用 --remotes
或 -r
标志手动删除分支,而不是通过 git fetch -p
清除过时的本地远程跟踪分支,这样可以避免进行额外的网络操作:
git branch --delete --remotes origin/X
git branch -dr origin/X
参见
deleted remote-tracking branch
**”:请参见 https://github.com/git/git/commit/ccd593cffaa020ff767860ec211462b8dbd727a6#diff-d18f86ea14e2f1e5bff391b2e54438cbR268 - VonC