状況を十分に正確に説明していないように見えるため、英語を使用しようとするのではなく、実際に実行するすべてのコマンドを記述する必要があります。たとえば、あなたの言い回しは、「merge into」と「merge to」を使用しており、同じことを表している場合とそうでない場合があります。マージの場合、通常は次のようなことを行いますgit checkout some-local-branch && git fetch && git merge origin/some-other-branch
。状況全体を自分で確実に理解していない場合は、すべての詳細が重要になる場合があります。また、ssh 接続を介してリモート マシンなどでいくつかのコマンドを実行する場合は、これも指摘してください。
質問から (2021-04-27T14:24:13+00:00 と表現されているように)、プロセス 2 が欠落しているように見えますgit push --tags
(またはおそらく)、元のリポジトリ以外git fetch
の場所で実行しようとすると(つまり、作業中の実際にはディレクトリにあります)、新しいタグはまったく表示されません。git describe
git show NEWTAG
使用しようとしているすべてのワークスペース (または「ブランチ」)から始めることをお勧めします。すべてのワークスペースで同じ SHA-1 を取得する必要があります。git show HEAD
また、実行して、現在の HEAD が一致すると思われるものと実際に一致することを確認することもできます。また、実行できる場合は、gitk
実行gitk NEWTAG HEAD
して問題の視覚的な表現を取得したり、gitk --all -n 10000
最大 10000 個の最新のコミットまでのすべてのブランチを表示したりすることもできます。
を使用できない場合はgitk
、たとえば を実行してみてくださいgit log --oneline --graph --decorate -n 50
。別の方法として、DAG からの最新の 50 件のコミットをタイトルなしで一覧表示するために実行することもできますgit log --oneline --graph --decorate -n 50 --format=%h%d
。これにより、さらに支援が必要な場合に SO で結果を共有できます。
スクリーンショットを見て更新
ブランチmaster
はどのタグとも同じ位置にgit describe
ないため、特定のタグ名を唯一の出力として出力しないでください。代わりに、v0.2-4-gf5d6ced
基本的に「v0.2 と HEAD が "で始まる SHA-1 を指す 4 つのパッチ」を意味するようなものを言う必要がありますf5d6ced
。この例の 4 つのパッチは、a5312dc、7dceb15、b4cd4f6、および f5d6ced で、以下には含まれていませんv0.2
。
これが私が作成した例です:
* f5d6ced (HEAD -> master) Merge branch 'staging'
|\
| * b4cd4f6 (staging) Merge branch 'dev' into staging
| |\
| | * 1fa7a37 (tag: v0.2, dev) Updated testfile yet again in branch dev
* | | 7dceb15 (tag: test) Merge branch 'staging'
|\ \ \
| |/ /
| * | a5312dc Merge branch 'dev' into staging
| |\ \
|/ / /
| | _
| * 96cd0ac (tag: v0.1) Updated testfile in branch dev
|/
* d626941 Added testfile in branch dev

v0.1
とv0.2
は注釈付きタグで、は注釈なしのtest
タグです。
$ git checkout dev && git describe
Switched to branch 'dev'
v0.2
$ git checkout staging && git describe
Switched to branch 'staging'
v0.2-2-gb4cd4f6
$ git checkout master && git describe
Switched to branch 'master'
v0.2-4-gf5d6ced
$ git checkout master && git describe --tags
Already on 'master'
test-3-gf5d6ced
これは、マージを作成するときに、明らかに独自の SHA-1 識別子を持つ新しいコミットを作成し、タグが常に特定のバージョンを参照するため、既存のタグがマージを指していないことが原因です。
git describe --abbrev=0
たとえば、最新のタグから 1 つだけのタグを選択し、特定のマージの最初の親を優先する可能性があるなど、実際に実行していませんか?
特定のブランチに既に含まれているタグを実際に把握しようとしている場合は、次のようなものを実行できます。
$ git checkout master && git tag --merged
Switched to branch 'master'
test
v0.1
v0.2
またはタグが作成された時間で並べ替え、最新のものから:
$ git checkout master && git tag --sort=-authordate --merged
Already on 'master'
test
v0.2
v0.1
そして、最新のタグだけが必要な場合は、実行できます
git tag --list --sort=-authordate --merged | head -n1
詳細については、を参照git help tag
してください。この場合、最新とは、特定のタグのオーサリング タイムスタンプを意味します。タグの場合、作成者のタイムスタンプとコミットのタイムスタンプは同じですが、私が知る限り、これはどこにも強制されていません。違いが重要な場合は、必要なタイムスタンプを決定するのはあなただけです。
特定の「エラー」ケースの詳細な説明:git describe
実際には主張したとおりに実行されませんでしたが、最も近いタグgit describe --abbrev=0
がリストされています。これは DAG トポロジであり、最新または最新のタグとはまったく異なる場合があることに注意してください。あなたの例では、との両方が ofからの距離が 1 で、 of からの距離が2です。さらに、古いタグは最初の親から取得されるため、応答として取得されます。特定のブランチに含まれる最新のタグが必要な場合は、代わりに使用することをお勧めします。でも、v0.17
v0.19
HEAD
staging
HEAD
master
v0.17
git tag --list --sort=-authordate --merged | head -n1
開発ブランチやステージング ブランチのランダム パッチではなく、マスター ブランチ リリースにタグ付けすることを強くお勧めします。git describe
次に、フラグなしで使用できます