Loading...
墨滴

舍得

2021/10/29  阅读:32  主题:姹紫

实战:怎么删除不需要的分支-20210129

image-20211029065806606
image-20211029065806606

目录

实验环境

实验环境:
win10
$ git version
git version 2.17.0.windows.1

1、老师当前要删除的2个分支

image-20211029061748560
image-20211029061748560
image-20211029061757599
image-20211029061757599
  • 但是自己当前分支如下
image-20211029061911423
image-20211029061911423
image-20211029062150741
image-20211029062150741
  • 问题,如何模拟老师上面那2个要删除的commiter?

开始测试:

image-20211029062736873
image-20211029062736873

打算用基于这个commit来创建一个名称为数字串的commit:

git checkout -b 8765473649 master
image-20211029062931155
image-20211029062931155

观察效果:

image-20211029063017359
image-20211029063017359
image-20211029063044199
image-20211029063044199

没毛病,测试成功!

接下来,我们继续老师的实验。

测试老师的实验

2、自己的测试环境

image-20211029063526818
image-20211029063526818
image-20211029063613060
image-20211029063613060

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
image-20211029064019442
image-20211029064019442

删除成功!

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到非缺省分支,还是要报错的。

需要注意的地方

:pushpin:注意:删除分支时-d的含义

image-20211029070054519
image-20211029070054519
git branch -d branch_name:使用-d 在删除前Git会判断在该分支上开发的功能是否被merge的其它分支。如果没有,不能删除。如果merge到其它分支,但之后又在其上做了开发,使用-d还是不能删除。-D会强制删除。老师能加一讲课来讲讲merge和rebase的区别吗。
image-20211029153721681
image-20211029153721681
作者回复: 小美,先给你👍。很擅长思考。

用-d 报“error:The branch is not fully merged”,是指这个分支不曾合入到其他任何分支。在日常开发中,我们通常赋予有意义的分支名,Git判断本分支没和任何别的分支合并,意味这删除存在风险。它也提供我们-D的方式,如果确定无风险就用-D 。
image-20211029154413227
image-20211029154413227
删除分支,-d会加一层判断逻辑,看是否合并到拉出的分支,确保删除动作的安全,-D不做这个判断直接删除。
image-20211029154659033
image-20211029154659033
作者回复: 应该是merge到缺省分支,执行 branch -d就不报错了。如果merge到非缺省分支,还是要报错的。

:pushpin:注意:测试-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设置上游。  
image-20211029110203174
image-20211029110203174

现在开始按照上面这位仁兄说明的进行测试:

image-20211029144954889
image-20211029144954889

发现目前只有2个分支,现在基于master分支创建一个新分支test:

image-20211029150041694
image-20211029150041694
image-20211029150115933
image-20211029150115933

此时通过git checkout f2b8f7e580b2bda命令来产生一个分离头指针,并进行一次提交:

image-20211029151411948
image-20211029151411948

此时,可以看到HEAD未指向任何的分支,也就是分离头指针的状态了:

image-20211029151435019
image-20211029151435019

此时,再从分离头指针状态切回到master分支,可以发现分离头指针的那个分支不见了,符合预期:

image-20211029151549384
image-20211029151549384

用git branch -d test接口删除分支test:

image-20211029151954785
image-20211029151954785
image-20211029152016180
image-20211029152016180

测试结束。

总结:关于这个自己不是太懂,目前先测试到这里。2021年10月29日15:35:49

:pushpin:注意:删除分支会删除对应的commit吗?

image-20211029154934211
image-20211029154934211
作者回复: 如果commit 不在其他分支上,我们删除了这些commit的分支的话,git在清理垃圾的时候会彻底清理掉这些commit。

关于我

我的博客主旨:我希望每一个人拿着我的博客都可以做出实验现象,先把实验做出来,然后再结合理论知识更深层次去理解技术点,这样学习起来才有乐趣和动力。并且,我的博客内容步骤是很完整的,也分享源码和实验用到的软件,希望能和大家一起共同进步!

各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人免费帮您解决问题:

  1. 个人微信二维码:x2675263825 (舍得), qq:2675263825。

    image-20211002091450217
    image-20211002091450217
  2. 个人博客地址:www.onlyonexl.cn

    image-20211002092057988
    image-20211002092057988
  3. 个人微信公众号:云原生架构师实战

    image-20211002141739664
    image-20211002141739664
  4. 个人csdn

    https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

    image-20211002092344616
    image-20211002092344616

总结

​ 好了,关于怎么删除不需要的分支实验就到这里了,感谢大家阅读,最后贴上我的美圆photo一张,祝大家生活快乐,每天都过的有意义哦,我们下期见!

image-20211029065853240
image-20211029065853240

舍得

2021/10/29  阅读:32  主题:姹紫

作者介绍

舍得