6

这是我的 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

5 回答 5

9

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

  1. 首先设置master分支指向最新的标签(HEAD指向的地方),因为它是最新的标签。为此,我创建了一个新分支并将 master 合并到它。
git branch -b exp
git merge -s ours master
git checkout master
git merge exp

现在 master 与 latest 标签相同:

v1.0    v1.1    v1.2
  |       |       |
  a   -   b   -   c
                  |
                 HEAD
                  |
                master
  1. 一旦我们将 master 放回原位,每当我们进行新的提交时,我们都需要推送 master 和标签:
git commit -a -m "Commit msg"
git tag -a v1.4 -m "Tag msg"
git push master --tags

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

于 2012-12-29T15:17:16.567 回答
4

已经给出了关于为什么不以这种方式做事的各种答案/评论,但这里是你解决这个特定场景的方法:

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在正确的位置创建额外的标签.

于 2012-12-27T15:47:53.617 回答
3

分支不引用标签。
一个标签引用一个固定的提交。

所以只要你git checkout master,你就不是在一个超然的HEAD模式
然后您可以提交和标记:标记将在当前分支的 LATEST 上创建。

如果您处于分离的 HEAD 模式,请参阅“ Git:我如何协调分离HEAD的与master/origin ”以了解将分离的提交与分支协调的各种方式。

于 2012-12-27T14:24:21.677 回答
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

于 2018-09-05T10:02:17.257 回答
0

我解决了这样的问题:

git checkout -B master HEAD
git push --force origin master
于 2022-02-11T14:55:20.967 回答