6

これは、現在の私の git リポジトリの例です。

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

私が抱えている主な問題は、マスター ブランチが最新のタグに移動しないため、常にDetached HEAD状態になることです。これを修正して、マスター ブランチが常に最新のプッシュされたタグを指すようにする方法はありますか?

4

5 に答える 5

9

この特定のケースでは、次のことを行う必要がありました。

  1. 最初に master ブランチが latest タグ (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. マスターを元の場所に戻したら、新しいコミットを行うたびにマスターとタグの両方をプッシュする必要があります。
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 に答える