git如何从tag拉取新分支

419 阅读3分钟

话说,有一个小老弟,他的名字叫张三,有一天张三突然迷惑了,平常总是从git的分支上拉取新的分支,那怎么从tag中拉取新分支呢?

众所周知,从git的分支上拉取新的分支,只需要简单的一段命令

git checkout -b master_new origin/master

其实就是

# git checkout -b 本地分支名 origin/远程分支名

如何从tag拉取新分支

那么:如何从tag拉取新分支? 很简单,有两个方法

方法1

使用下述命令即可

git checkout -b test origin/V1.0.1

git checkout -b <branch-name> origin/<tag-name>
# git checkout -b 本地分支名 origin/远程标签名

方法二

第二个方法是由两个命令组成: 先拉取tag到本地分支

git checkout -b V1.0.1

再从远程仓库拉取最新的更改

git pull origin V1.0.1

git checkout -b test <tag-name>
# 创建新分支并切换到指定标签所在的提交
git pull origin <tag-name>
# 从远程仓库拉取指定标签的最新代码

有些人有疑问了,为什么方法二,还需要使用git pull进行拉取最新的tag代码呢?tag不就是固定的某一次的提交代码吗?

能想到这一步,说明你对tag和分支有一定的了解了。 但是,还是有没想到的地方。

是什么呢?听我娓娓道来。

为什么需要git pull

如果你在 test1 分支上执行 git checkout -b test_new test2,那么将会从 test2 标签处创建一个新分支 test_new,但是这个分支的内容将会与 test2 标签所指向的提交相同。即使在 test2 标签之后有新的提交,test_new 分支也不会包含这些更改。

因为,test2并不是远程仓库,而是你本地git仓库存储的部分信息,所以,当你去拉取分支的时候,你本地的test2分支对应的commit提交,可能是很久之前的,所以,明白了吗?

随手git pull,保持代码最新,才能让我们不会出现低级的代码掰头~

在延伸一点,如果你觉得我不想用git pull,为什么不能直接拉最新的代码呢?OK,看看下面的一点课外知识,不做过多讲解,学会了,你就用,学不会,就要跟随~~~ 从test2 标签创建的分支 test_new 并不包含最新的更改,可能有几种可能的原因:

  1. 本地仓库未更新: 可能你的本地仓库没有更新到最新的标签。你可以尝试执行 git fetch --tags 命令来确保你的本地仓库已经获取了所有最新的标签。
  2. 远程仓库未更新: 如果标签是在远程仓库创建的,可能你的远程仓库中的标签并不是最新的。你可以尝试执行 git fetch --tags origin 命令来从远程仓库获取最新的标签。

总结

tag和分支,总体上可以说是有相同的命令操作,但是,要记得,分支可以进行功能代码开发,代码提交。 tag,一般作为标记某次提交后的代码重要的版本,谁让你在tag上开发功能,拒绝就完了。 不规范的操作,会让代码成为令人唾弃的存在~~~