1、删除本地分支
在删除分支的时候,我们会使用git branch --delete <local-branch-name>来执行.有时还会通过缩写git branch -d <local-branch-name>来代替,使用中我们发现还有git branch -D <local-branch-name>的写法,他们有什么区别呢?
-
-d是--delete的缩写,在使用--delete删除分支时,该分支必须完全和它的上游分支merge完成(了解上游分支,可以点击查看链接),如果没有上游分支,必须要和HEAD完全merge
-
-D是--delete --force的缩写,这样写可以在不检查merge状态的情况下删除分支
-
--force简写-f,作用是将当前branch重置到初始点(startpoint),如果不使用--force的话,git分支无法修改一个已经存在的分支
备注:如果本地分支有修改,已经add并commit到本地暂存区,没有推到远程仓库。使用-d将会报错,使用-D比较合适些。
2、删除远程分支
指令git push origin --delete <remote-branch-name>,该指令同时会删除跟踪关系(追踪关系可以理解成本地分支和远程分支的关联关系)标签,此时跟踪关系就不存在了,但是如果使用git push,在远端仓库可以看到新建了<remote-branch-name>分支,跟踪关系恢复,除非使用git config --unset branch.<local-branch-name>.remote , git config --unset branch.<local-branch-name>.merge真正消除。
3、删除跟踪关系
通过指令git branch --delete --remotes origin/<remote-branch-name>或者git branch -d -r origin/<remote-branch-name>,可以删除跟踪关系标签,没有删除远程分支,即使再进行删除远端分支的命令,使用git branch -vv仍然可以看到跟踪关系,使用git push仍然可以推到对应的上游分支,这种关联跟踪关系似乎被记忆了,因此要想完全彻底的消除跟踪关系,还需要使用git config --unset branch.<local-branch-name>.remote , git config --unset branch.<local-branch-name>.merge
备注:感觉无论是单独删除远程分支还是只删除跟踪关系标签,不执行git config --unset branch.<local-branch-name>.remote , git config --unset branch.<local-branch-name>.merge,不能实现完全的关系分割。
参考文档:
扩展内容: 合并和编辑的理解