Git分支

一.Git分支

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

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

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

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

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

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

learn-branches

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

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

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

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

1 Git分支操作命令

创建分支:

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

查看分支:

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

进入分支(切换分支):

git checkout  <branch_name>       # 切换到名为<branch_name>的分支

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

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

 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   <tag_name>      # 创建一个轻量标签,标签名称 : <tag_name>
git tag -a  <tag_name>  -m "tag message"   #创建一个带注释的标签

查看标签:

git tag        # 列出所有标签

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

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

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

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

删除标签 :

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

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

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,这样我们就可以买后悔药,恢复到被删除的那个版本。


 

<think>好的,我现在需要处理用户关于Git分支管理的查询。首先,用户提到了几个引用内容,我需要仔细看一下这些引用来确保回答准确。 首先,引用[1]提到master分支并不是特殊分支,只是因为git init默认创建,很多人懒得改。这说明在回答时需要强调master分支的普通性,可能还要提到如何修改默认分支名称。 引用[2]讨论了删除分支的情况,特别是使用git branch -D强制删除。这里需要注意区分-D-d的区别,用户可能在这里有疑问,比如什么时候需要强制删除。 引用[3]展示了用git log带参数查看分支合并历史,比如--graph--abbrev-commit。这部分应该在教程中介绍如何可视化分支结构,帮助用户理解合并情况。 接下来,用户需要Git分支管理教程,所以需要结构清晰,分步骤讲解。根据系统指令,要使用中文,正确使用LaTeX格式的数学表达式,不过这里可能用不上数学公式,但需要注意行内代码用$...$吗?不过根据示例,代码块是用```包裹的,可能数学表达式才用$,代码部分不需要。但用户的问题是关于Git的,可能涉及命令示例,需要正确展示代码块。 系统级指令要求生成相关问题,所以最后需要列出相关问题。回答中引用的部分要添加引用标识,例如在提到默认分支时加上[^1],删除分支时引用[^2],查看合并历史引用[^3]。 现在开始组织教程的结构: 1. 分支创建与切换:使用git branchgit checkout或git switch,引用相关命令。 2. 分支合并:mergerebase的区别,如何解决冲突。 3. 分支删除:git branch -d-D的区别,引用[2]的例子。 4. 查看分支历史:git log参数,如--graph,引用[3]。 5. 远程分支管理:推送、、跟踪远程分支。 6. 默认分支设置:提到引用[1],说明master的普通性及如何修改默认分支。 需要确保每个部分都简明,命令示例正确,并适当加入引用标注。最后生成相关问题,比如分支合并策略、解决冲突的方法、重命名默认分支等。 现在检查是否有遗漏,比如分支管理的最佳实践、rebase的风险,或者如何查看远程分支状态。可能需要简要提及,但保持教程基础,不过于深入。 确认引用正确,每个引用只出现在相关部分末尾,自然地添加标识。例如,在讨论默认分支时引用[^1],删除分支引用,查看历史引用。 最后,确保使用中文,代码块用正确语法,例如: ```bash git branch new-feature ``` 这样用户能清楚看到命令格式。避免使用任何Markdown格式错误,比如正确使用三个反引号语言标识。同时,生成的相关问题要围绕分支管理的常见疑问,比如创建、合并、删除、冲突解决等。</think>### Git 分支管理教程 #### 1. 分支创建与切换 - **创建分支**:使用 `git branch <分支名>` 命令,例如: ```bash git branch new-feature ``` - **切换分支**:使用 `git checkout <分支名>` 或更直观的 `git switch <分支名>`: ```bash git switch new-feature ``` #### 2. 分支合并 - **合并分支**:通过 `git merge` 将目标分支合并到当前分支。例如,将 `new-feature` 合并到 `master`: ```bash git switch master git merge new-feature ``` 若合并时发生冲突,需手动解决后提交。 - **变基(Rebase)**:另一种整合分支的方式是 `git rebase`,它会将当前分支的提交“移植”到目标分支顶端,使历史更线性: ```bash git switch new-feature git rebase master ``` #### 3. 分支删除 - **安全删除**:若分支已合并到其他分支,可用 `git branch -d <分支名>` 删除: ```bash git branch -d new-feature ``` - **强制删除未合并分支**:若分支未合并但需删除,使用 `-D` 参数[^2]: ```bash git branch -D experimental ``` #### 4. 查看分支历史 使用 `git log` 参数可视化分支合并情况: ```bash git log --graph --pretty=oneline --abbrev-commit ``` 此命令会显示分支拓扑结构简化的提交哈希值。 #### 5. 远程分支管理 - **推送分支到远程仓库**: ```bash git push origin new-feature ``` - **远程分支**: ```bash git fetch origin git switch -c local-feature origin/new-feature ``` #### 6. 默认分支设置 Git 的默认分支(如 `master` 或 `main`)并无特殊性,仅因 `git init` 默认创建[^1]。可通过以下步骤修改默认分支: 1. 创建并切换到新分支: ```bash git switch -c main ``` 2. 推送并更新远程仓库: ```bash git push -u origin main git branch -d master ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值