目录
文章目录
实验环境
实验环境:
win10
$ git version
git version 2.17.0.windows.1
1、老师当前要删除的2个分支
- 但是自己当前分支如下
- 问题,如何模拟老师上面那2个要删除的commiter?
开始测试:
打算用基于这个commit来创建一个名称为数字串的commit:
git checkout -b 8765473649 master
观察效果:
没毛病,测试成功!
接下来,我们继续老师的实验。
测试老师的实验
2、自己的测试环境
3、开始删除无用的分支
自己将要删除8765473649、fix_css、fix_readme这3个分支。
#查看当前all分支
hg@LAPTOP-G8TUFE0T MINGW64 /d/git_repository/git_learning (8765473649)
$ git branch -av
* 8765473649 f2b8f7e Move readme.md readme
fix_css 56a49b4 Modify color to green
fix_readme 56a49b4 Modify color to green
master f2b8f7e Move readme.md readme
temp 30c1501 Add test
#注意,此时因处于8765473649分支,so删除不了,需要切换到其它分支后,再进行删除本分支
hg@LAPTOP-G8TUFE0T MINGW64 /d/git_repository/git_learning (8765473649)
$ git branch -d 8765473649
error: Cannot delete branch '8765473649' checked out at 'D:/git_repository/git_learning'
hg@LAPTOP-G8TUFE0T MINGW64 /d/git_repository/git_learning (8765473649)
$ git branch -D 8765473649
error: Cannot delete branch '8765473649' checked out at 'D:/git_repository/git_learning'
hg@LAPTOP-G8TUFE0T MINGW64 /d/git_repository/git_learning (8765473649)
$ git checkout master
Switched to branch 'master'
hg@LAPTOP-G8TUFE0T MINGW64 /d/git_repository/git_learning (master)
$ git branch -d 8765473649
Deleted branch 8765473649 (was f2b8f7e).
hg@LAPTOP-G8TUFE0T MINGW64 /d/git_repository/git_learning (master)
$ git branch -av
fix_css 56a49b4 Modify color to green
fix_readme 56a49b4 Modify color to green
* master f2b8f7e Move readme.md readme
temp 30c1501 Add test
#删除分支的-d -D选项
hg@LAPTOP-G8TUFE0T MINGW64 /d/git_repository/git_learning (master)
$ git branch -d fix_css
error: The branch 'fix_css' is not fully merged.
If you are sure you want to delete it, run 'git branch -D fix_css'.
hg@LAPTOP-G8TUFE0T MINGW64 /d/git_repository/git_learning (master)
$ git branch -D fix_css
Deleted branch fix_css (was 56a49b4).
hg@LAPTOP-G8TUFE0T MINGW64 /d/git_repository/git_learning (master)
$ git branch -d fix_readme
error: The branch 'fix_readme' is not fully merged.
If you are sure you want to delete it, run 'git branch -D fix_readme'.
hg@LAPTOP-G8TUFE0T MINGW64 /d/git_repository/git_learning (master)
$ git branch -D fix_readme
Deleted branch fix_readme (was 56a49b4).
验证:符合预期效果。
hg@LAPTOP-G8TUFE0T MINGW64 /d/git_repository/git_learning (master)
$ git branch -av
* master f2b8f7e Move readme.md readme
temp 30c1501 Add test
hg@LAPTOP-G8TUFE0T MINGW64 /d/git_repository/git_learning (master)
$ gitk --all
删除成功!
4、总结
删除分支命令:
删除:
`git branch -d branch_name`
强制删除:
`git branch -D branch_name`
说明:选项
-d
--delete
Delete a branch. The branch must be fully merged in its upstream branch, or in HEAD if no upstream was set with --track or --set-upstream-to.
删除一个分支。 分支必须在它的上游分支中完全合并,或者在HEAD中,如果没有使用-track或-set-upstream-to设置上游。
-D
Shortcut for --delete --force.
--delete --force的快捷方式。
注意:git branch -d branch_name:使用-d 在删除前Git会判断在该分支上开发的功能是否被merge到其它分支。如果没有,不能删除。如果merge到其它分支,但之后又在其上做了开发,使用-d还是不能删除。-D会强制删除;
注意:用-d 报“error:The branch is not fully merged”,是指这个分支不曾合入到其他任何分支。在日常开发中,我们通常赋予有意义的分支名,Git判断本分支没和任何别的分支合并,意味这删除存在风险。它也提供我们-D的方式,如果确定无风险就用-D 。
注意:删除分支,-d会加一层判断逻辑,看是否合并到拉出的分支,确保删除动作的安全,-D不做这个判断直接删除。
注意:作者回复: 应该是merge到缺省分支,执行 branch -d就不报错了。如果merge到非缺省分支,还是要报错的。
需要注意的地方
📌注意:删除分支时-d的含义
git branch -d branch_name:使用-d 在删除前Git会判断在该分支上开发的功能是否被merge的其它分支。如果没有,不能删除。如果merge到其它分支,但之后又在其上做了开发,使用-d还是不能删除。-D会强制删除。老师能加一讲课来讲讲merge和rebase的区别吗。
作者回复: 小美,先给你👍。很擅长思考。
用-d 报“error:The branch is not fully merged”,是指这个分支不曾合入到其他任何分支。在日常开发中,我们通常赋予有意义的分支名,Git判断本分支没和任何别的分支合并,意味这删除存在风险。它也提供我们-D的方式,如果确定无风险就用-D 。
删除分支,-d会加一层判断逻辑,看是否合并到拉出的分支,确保删除动作的安全,-D不做这个判断直接删除。
作者回复: 应该是merge到缺省分支,执行 branch -d就不报错了。如果merge到非缺省分支,还是要报错的。
📌注意:测试-d选项中HEAD场景
--delete
Delete a branch. The branch must be fully merged in its upstream branch, or in HEAD if no upstream was set with --track or --set-upstream-to.
删除一个分支。 分支必须在它的上游分支中完全合并,或者在HEAD中,如果没有使用-track或-set-upstream-to设置上游。
现在开始按照上面这位仁兄说明的进行测试:
发现目前只有2个分支,现在基于master分支创建一个新分支test:
此时通过git checkout f2b8f7e580b2bda命令来产生一个分离头指针,并进行一次提交:
此时,可以看到HEAD未指向任何的分支,也就是分离头指针的状态了:
此时,再从分离头指针状态切回到master分支,可以发现分离头指针的那个分支不见了,符合预期:
用git branch -d test接口删除分支test:
测试结束。
总结:关于这个自己不是太懂,目前先测试到这里。2021年10月29日15:35:49
📌注意:删除分支会删除对应的commit吗?
作者回复: 如果commit 不在其他分支上,我们删除了这些commit的分支的话,git在清理垃圾的时候会彻底清理掉这些commit。
关于我
我的博客主旨:我希望每一个人拿着我的博客都可以做出实验现象,先把实验做出来,然后再结合理论知识更深层次去理解技术点,这样学习起来才有乐趣和动力。并且,我的博客内容步骤是很完整的,也分享源码和实验用到的软件,希望能和大家一起共同进步!
各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人免费帮您解决问题:
-
个人微信二维码:x2675263825 (舍得), qq:2675263825。
-
个人博客地址:www.onlyonexl.cn
-
个人微信公众号:云原生架构师实战
-
个人csdn
https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421
总结
好了,关于怎么删除不需要的分支实验就到这里了,感谢大家阅读,最后贴上我的美圆photo一张,祝大家生活快乐,每天都过的有意义哦,我们下期见!