将master分支设置为最新标记

时间:2012-12-27 11:56:30

标签: git tags push head master

这是我的git repo现在如何的一个例子:

v1.0    v1.1    v1.2
  |       |       |
  a   -   b   -   c
  |               |
master           HEAD

我通常像这样提交,标记和推送标签:

git commit -a -m "Commit msg"
git tag -a v1.3 -m "Tag msg"
git push --tags

我遇到的主要问题是master分支没有移动到最新的标签,所以我总是处于Detached HEAD状态。有没有办法解决这个问题,以便主分支始终指向最新的推送标签?

4 个答案:

答案 0 :(得分:7)

在这种特殊情况下,我必须执行以下操作:

1)首先将主分支设置为指向最新标记(HEAD指向的位置),因为它是最新的标记。为此,我创建了一个新的分支并将master合并到它。

git branch -b exp
git merge -s ours master
git checkout master
git merge exp

现在master与最新标记相同:

v1.0    v1.1    v1.2
  |       |       |
  a   -   b   -   c
                  |
                 HEAD
                  |
                master

2)一旦我们回到原地,我们需要在我们进行新的提交时同时推送master和tags:

git commit -a -m "Commit msg"
git tag -a v1.4 -m "Tag msg"
git push master --tags

这样我们就可以避免处于Detached HEAD模式并更新master分支。

答案 1 :(得分:3)

已经给出了关于为什么不以这种方式做事的各种答案/评论,但这里是你如何解决这个特殊情况:

git checkout -b tmpbranch       # creates a branch called tmpbranch at HEAD
git checkout master             # switch back to master branch
git merge --ff-only tmpbranch   # fast-forward merge master to tmpbranch, fail if not possible
git branch -d tmpbranch         # delete tmpbranch, it's not needed anymore

然后,继续,不要检查标签,除非这样:

git checkout -b somebranch refs/tags/tagname    # creates a new branch starting at tag

这样,您将不会处于分离的HEAD状态,并且将从相关标签开始添加任何新提交,这似乎是您想要的...在提交后,您可以git tag newtag在正确的点创建额外的标签。

答案 2 :(得分:2)

分支不引用标签 标记引用修复提交。

只要您git checkout master,您就不在detached HEAD mode 然后,您可以提交并标记:标记将在当前分支的LATEST上创建。

如果您处于分离的HEAD模式,请参阅“Git: How can I reconcile detached HEAD with master/origin?”以了解将分离的提交与分支进行协调的各种方法。

答案 3 :(得分:0)

标签用于创建稳定版本。要创建用于与Git Drupal存储库一起使用的标签,首先,如果要使用此标签进行发布,请确保遵循标签命名约定。在项目目录内部,有一个示例:

git tag 7.x-1.0

创建标签后,您需要将标签推送到主存储库。就其本身而言,push不会发送标签,您还需要通过附加--tags标志来告诉它在标签中包含标签:

git push --tags

如果您不想推送所有标签,也可以具体说明: 示例:

git push origin tag 7.x-1.0

要检查并确认远程标记,命令为:-

git tag -l