您现在的位置是:首页 >技术交流 >《五》 Git 中的标签和分支网站首页技术交流

《五》 Git 中的标签和分支

花铛 2024-07-10 00:01:02
简介《五》 Git 中的标签和分支

标签 tag:

Git 可以给仓库中某一次 commit 的提交打上标签。对于重大的版本经常会打上一个标签来表示它的重要性。

创建标签:

git tag【tag 名称】:创建标签。

查看标签:

git tag:查看标签。

推送标签到远程仓库:

默认情况下,git push 命令并不会将标签推送到远程仓库中去,必须显式地手动推送。这样,当其他人从远程仓库克隆或者拉取时,也能获取到标签。

  1. git push【远程仓库别名】 【tag 名称】:推送指定的标签。
  2. git push【远程仓库别名】 --tags:推送全部标签。

删除标签:

  1. git tag -d【tag 名称】:删除本地仓库中的标签。
  2. git push 【远程仓库别名】-d【tag 名称】:删除远程仓库中的标签。

检出标签(回退到指定标签的版本):

回退到指定标签的版本后,并不会在当前标签的版本上直接修改内容,因为也并不想舍弃当前标签的版本后面提交的内容。一般情况下,会在当前标签的版本基础上另开一个分支出来修改内容,之后再将分支进行合并即可。

git checkout 【tag 名称】:回退到指定标签的版本。

分支 branch:

在版本控制过程中,使用多条线同时推进多个任务,这就是分支。

使用分支的好处:

  1. 可以同时并行推进多个功能的开发,提供开发效率。
  2. 各个分支之间互不影响,即使某个分支开发失败,也不会其他任何分支有影响。

请添加图片描述

Git 分支管理的本质就是创建和移动指针,创建分支其实就是创建一个新的指针,切换分支其实就是移动指针。

SVN 中创建分支是将目录和文件全部都复制一套出来。

版本库初始化之后,默认会有一条 master 主分支,HEAD 指向 master 分支;如果新建一个 testing 分支,其实就是新建一个指针指向 f30ad 这个版本。
请添加图片描述

查看分支:

使用 git branch 查看分支。

* master // 前面的 * 号表示当前正在这个分支上
创建分支:

使用 git branch hot_fix 创建 hot_fix 分支,然后使用 git branch 查看一下分支。

  hot_fix
* master // 前面的 * 号表示当前正在这个分支上
切换分支:

使用 git checkout hot_fix 切换到 hot_fix 分支上,然后使用 git branch 查看一下分支。

* hot_fix
  master
  1. 如果在 master 分支上修改了 index.txt 文件的内容,但是只在工作区做了修改,并没有 add 到暂存区和提交到本地仓库中,那么如果切换到 hot_fix 分支,index.txt 修改的内容也将被带过去。

修改的内容在哪个分支上提交,将会归属于哪个分支,另一个分支就不会再显示这部分内容了。

  1. 如果在 master 分支上修改了 index.txt 文件的内容,但是只在工作区做了修改和 add 到了暂存区,并没有提交到本地仓库,那么如果想要切换到 hot_fix 分支将会被 Git 阻止。
创建+切换分支:

可以使用 git checkout -b 【分支名】 直接创建并且切换分支。

删除分支:

首先当前所在的分支不能是想要删除的分支,然后使用 git branch -d 【分支名】 即可删除。

合并分支:
  1. 当前正在 hot_fix 分支上,修改 index.txt 文件的内容并提交到本地仓库。
  2. 使用 git checkout master 切换到 master 分支上,然后使用 git merge hot_fix 将 hot_fix 合并到 master 分支上。
    Updating 373446c..b4f6025
    Fast-forward  // 如果顺着一个分支走下去能够到达另一个分支,那么 Git 在合并两者的时候,只会简单地将指针向前推进,这就叫做快进(fast-forward)
     index.txt | 4 +++-
     1 file changed, 3 insertions(+), 1 deletion(-)
    
解决冲突:

如果在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,那么对这两个分支进行合并时就会产生冲突。

  1. 当前在 master 分支上,对 index.txt 文件的第三行进行修改并提交到本地仓库。
  2. 使用 git checkout hot_fix 切换到 hot_fix 分支上,也对 index.txt 文件的第三行进行修改并提交到本次仓库。
  3. 此时使用 git merge master 将 master 分支合并到 hot_fix 分支上,会出现冲突,终端中显示如下:
    Auto-merging index.txt
    CONFLICT (content): Merge conflict in index.txt
    Automatic merge failed; fix conflicts and then commit the result.
    
    以 VSCode 为例,在 index.txt 文件中显示如下:
    在这里插入图片描述
    删除特殊符号、留下想要的内容来解决冲突。
  4. 此时使用 git status 来查看一下状态:
    On branch hot_fix
    You have unmerged paths.
      (fix conflicts and run "git commit")
      (use "git merge --abort" to abort the merge)
    
    Unmerged paths:
      (use "git add <file>..." to mark resolution) // 使用 git add 来标记冲突的解决
            both modified:   index.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
  5. 使用 git add index.txt 来标记冲突的解决,再次使用 git status 来查看一下状态:
    On branch hot_fix
    All conflicts fixed but you are still merging.
      (use "git commit" to conclude merge) // 使用 git commit 来结束合并
    
    Changes to be committed:
            modified:   index.txt
    
  6. 使用 git commit -m 'resolve conflict 来结束合并并提交。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。