《五》 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:

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

Git 的分支,其实本质上仅仅是指向提交对象的指针,会在每次提交时自动移动,永远指向最新一次的提交对象。

HEAD 指针总是指向当前所在的分支,以此来告知 Git 当前正在哪个分支上。

Git 的默认分支是 master 分支,会在 git init 时自动创建。master 分支并不是一个特殊的分支,和其他分支没有任何区别。
SVN 中创建分支是将目录和文件全部都复制一套出来。

使用分支的好处:

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

分支的流程图:

  1. 在 master 分支上,commit 提交两次。
    请添加图片描述
  2. 在第二次 commit 提交后,新建一个 hot_fix 分支。
    请添加图片描述
  3. 继续在 master 分支上提交两次。
    请添加图片描述
  4. 切换到 hot_fix 分支。

在这里插入图片描述

  1. hot_fix 分支上提交一次。
    请添加图片描述
  2. 切换到 master 分支,并且将 hot_fix 分支合并进去后,进行一次提交。请添加图片描述

操作本地分支:

查看分支:

git branch:查看所有的分支。

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

git branch 【分支名称】:创建分支。

切换分支:

git checkout 【分支名称】:切换分支。

git checkout 【分支名称】 命令会进行以下操作:

  1. 如果本地仓库中已有这个分支,会切换到指定的分支上。
  2. 如果本地仓库中没有这个分支,会检查远程仓库中是否有同名分支:
    • 如果没有的话,报错。
    • 如果有的话,Git 会自动新建一个本地分支,并为本地分支与远程分支建立跟踪关系。

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

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

git checkout -b 【分支名称】: 创建并同时切换分支。

删除分支:

git branch -d 【分支名称】 :删除分支,前提是当前所在的分支不能是要删除的分支。

合并分支:

git merge 【分支名称】 :将 【分支名称】的内容合并进当前所在的分支里。

Updating 373446c..b4f6025
Fast-forward  // 如果顺着一个分支走下去能够到达另一个分支,那么 Git 在合并两者的时候,只会简单地将指针向前推进,这就叫做快进 fast-forward
index.txt | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
解决合并分支导致的冲突:

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

Auto-merging index.txt
CONFLICT (content): Merge conflict in index.txt
Automatic merge failed; fix conflicts and then commit the result.

在这里插入图片描述

删除特殊符号、留下需要的内容后,重新 git addgit commit 提交一次即可解决冲突。

操作远程分支:

推送本地分支到远程:

git push 【自定义的远程仓库别名】【分支名】 :将本地仓库的分支及其内容推送到远程仓库。

如果此时远程仓库还没有这个分支,git push 【自定义的远程仓库别名】【分支名】 会直接在远程仓库中新建分支。

fetch、pull、push 也可以不带后面的自定义的仓库别名和分支名称来明确指定远程分支,此时就会使用上游分支。
可以使用 git branch -vv 来查看已设置的上游分支。
可以使用 git branch --set-upstream-to 【自定义的远程仓库别名】/【分支名】 来设置上游分支。设置上游分支后,就意味着本地分支和远程分支之间建立了跟踪关系。

直接从远程仓库克隆到本地的项目,本地分支的上游分支默认就是远程仓库拉取到本次仓库的远程分支的映射,会自动为本地分支和远程分支建立跟踪关系。

从远程仓库拉取到本地仓库的的远程分支的映射是以 <remote>/<branch> 的形式命名的,用来引用对应的远程分支。
请添加图片描述

  1. 在本地仓库所在目录的终端,执行 git push origin master
    Enumerating objects: 31, done.
    Counting objects: 100% (31/31), done.
    Delta compression using up to 8 threads
    Compressing objects: 100% (18/18), done.
    Writing objects: 100% (31/31), 2.38 KiB | 610.00 KiB/s, done.
    Total 31 (delta 0), reused 0 (delta 0), pack-reused 0
    To https://github.com/huadangmao/test.git
     * [new branch]      master -> master // 将本地的 master 分支推送到远程的 master 分支
    
拉取远程分支到本地:

git pull 【自定义的仓库别名】【分支名称】 :将远程仓库的分支及其内容拉取到本地仓库并进行合并。

如果本次仓库此时还没有这个分支,git pull 【自定义的仓库别名】【分支名称】 不会直接新建分支,它需要在一个已存在的本地分支上执行。
此时,可以使用 git checkout 【分支名称】

git fetch:从远程仓库拉取代码到本地仓库,不会直接和本地的文件进行合并,也就是说并不会修改工作区的代码。
git pull; 从远程仓库拉取代码到本地仓库,并直接和本地的文件进行合并。所以 git fetch + git merge = git pull

  1. git pull origin master:拉取远程仓库 master 分支的代码到本地仓库并合并。
删除远程分支:

git push origin -d 【分支名称】:删除远程分支。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值