• Git分支


    一.Git分支

    几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。

    使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

    Git 分支实际上是指向更改快照的指针。

    有人把 Git 的分支模型称为必杀技特性,而正是因为它,将 Git 从版本控制系统家族里区分出来

    分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN。

    如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN!

    learn-branches

    分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。

    现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

    其他版本控制系统如SVN等都有分支管理,但是用过之后你会发现,这些版本控制系统创建和切换分支比蜗牛还慢,简直让人无法忍受,结果分支功能成了摆设,大家都不去用。

    但Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。

    1 Git分支操作命令

    创建分支:

    git branch                 # 创建一个名为的新分支
    git checkout -b         # 创建一个新分支并切换到该分支

    查看分支:

    git branch                            # 查看所有本地分支
    git branch -a                        # 查看所有本地和远程分支

    进入分支(切换分支):

    git checkout         # 切换到名为的分支

    上传分支(推送分支到远程仓库):

    git push origin      # 将当前分支推送到远程仓库

     Gitee新建仓库:

    然后点击初始化readme文件

    打开Git Bash进行克隆:

     比如我们在开发中需要实现10个模块,我这里的创建10个文件来进行模拟。

    在本地工作区间中,右键打开命令窗口

    输入命令创建开发环境 :  git branch dev  ( 比如这是创建一个开发环境 )

    输入命令创建测试环境 :  git branch test( 比如这是创建一个测试环境 )

    比如现在已经有5个模块做完成了,需要上传到测试环境中。

    使用gui打开图形操作界面,右键点击Git GUI 。点击文件图标,要1到5的文件让git管理

    5个模块已经开发完成了,需要放入测试环境中进行测试,输入以下命令

     git commit -m "5个用户模块已经开发完毕,放入到测试环境中测试" --提交并且添加备注

    在查看模块的状态。

    在本地的文件夹中是看不到在测试环境中的文件的,

    输入命令进入测试环境 :  git checkout test

    输入以下命令,将开发环境中的模块和测试环境中的模块进行整合,整合之后在测试环境中可以看到所有的模块。

    命令 :  git merge dev

    测试完成后,我们进入到开发环境中,将开发环境作为一个分支上传到远程仓库中

    命令 :  git checkout dev   ( 进入开发环境 )

    命令 :  git push origin dev  ( 将开发环境作为一个分支上传到远程仓库中 )

    上传后,在远程仓库中的这个分支里,就可以看到当时开发环境的所有模块及代码和文件

    我们再进入到测试环境中,将测试环境作为一个分支上传到远程仓库中

    命令 :  git checkout test( 进入测试环境 )

    命令 :  git push origin test( 将测试环境作为一个分支上传到远程仓库中 )

    上传后,在远程仓库中的这个分支里,就可以看到当时测试环境的所有模块及代码和文件

    二.Git标签

    1. 命令 


    创建标签:

    git tag        # 创建一个轻量标签,标签名称 :
    git tag -a    -m "tag message"   #创建一个带注释的标签

    查看标签:

    git tag        # 列出所有标签

    进入标签(切换到标签所指向的提交):

    git checkout      # 切换到名为的标签所指向的提交

    上传标签(推送标签到远程仓库):

    git push origin       # 将名为的标签推送到远程仓库
    git push --tags                           # 将所有本地标签推送到远程仓库

    删除标签 :

    git tag -d    # 将名为的标签删除

    git push origin :refs/tags/    # 将在远程仓库名为的标签删除
     

    2. 标签规范


    在 Git 中,标签的命名规范可以根据个人或团队的习惯来制定,但是一般来说,建议遵循以下规范:

    1. 标签名应该简短、有意义,并且能够清晰地表达该标签所代表的含义。

    2. 标签名应该使用英文单词,可以包含数字和连字符(-),但是不要包含空格或其他特殊字符。

    3. 如果要创建一个版本号标签,建议使用语义化版本号(Semantic Versioning,简称 SemVer)规范,格式为 `v1.0.0.20231111`,其中 v1表示主版本号,第一个0表示次版本号,第二个0表示修订号,20231111表示日期。

    v1.0.0.20231111可以再加个.后缀   

                  为 : .alpha 表示开发环境
                  为 : .beta 表示测试环境

                  为 : .rc  表示灰度环境

                  为 : .r  表示生成环境

    4. 如果要创建一个带注释的标签,建议在注释中包含该标签的详细信息,例如该版本的功能特性、修复的 bug、重要的变更等。

    总之,标签的命名规范应该清晰、简洁、有意义,并且符合团队或行业的惯例。这样可以帮助我们更好地管理代码历史,提高代码的可读性和可维护性。

    3. 应用

    1.创建 tag 标签

    创建本地标签 :git tag ,如git tag v1.0。

    2.推送 tag 标签

    需要注意的是标签的推送跟分支的推送不是同一回事,tag 标签创建后需要单独推送。

    推送 tag 标签:git push origin ,推送到远程仓库。如git push origin v1.0。

    推送多个未推送的本地标签:git push origin --tags

    3.查看标签

    查看本地所有标签:git tag。

    查看远程仓库所有标签:git ls-remote --tags origin。

    产看本地指定的某个标签的详细信息:git show 。

    4.切换标签

    切换标签前需确保当前代码是未改动状态,若改动了需执行命令git checkout .取消当前未保存的改动。

    切换标签:git checkout 。

    查看远程仓库历史提交记录:git log。

    5.删除标签

    删除本地标签:git tag -d 。

    删除远程标签:git push origin :refs/tags/。

    6.拉取指定 tag 标签代码

    clone 指定 tag 标签代码:git clone --branch [tag] [git地址]

    git reflog 命令可以查看所有分支的所有操作记录信息(包括已经reset前面的commitID)。例如:执行 git reset --hard HEAD~1,退回到上一个版本,用git log则是看不出来被删除的commitid,用git reflog则可以看到被删除的commitid,这样我们就可以买后悔药,恢复到被删除的那个版本。


     

  • 相关阅读:
    Large Language Model Alignment: A Survey
    【Python自学笔记】Python编程:使用sys和argparse配置和使用带参数的命令行
    Arrays.fill(dp, Integer.MAX_VALUE)
    Linux命令(87)之pwd
    R语言glm函数构建二分类logistic回归模型(family参数为binomial)、使用AIC函数比较两个模型的AIC值的差异(简单模型和复杂模型)
    【算法萌新闯力扣】:旋转字符串
    CLIP:多模态领域革命者
    渗透测试-靶机打靶思路与方法
    985测试工程师被吊打,学历和经验到底谁更重要?
    [附源码]java毕业设计票务销售网站
  • 原文地址:https://blog.csdn.net/liaozhixiangjava/article/details/134350531