リモートタグと同じ名前のローカルブランチをgit pushする


110

product-0.2同じ名前のタグがすでに存在するリモートブランチに新しいローカルブランチをプッシュしようとしています(ただし、ブランチ自体は存在しません)

git push -v --tags --set-upstream origin product-0.2:product-0.2 
Pushing to https://****@github.com/mycompany/product.git
error: src refspec product-0.2 matches more than one.
error: failed to push some refs to 'https://****@github.com/mycompany/product.git'

と同じ:

git push origin product-0.2:/refs/heads/product-0.2 

ブランチを作成するなど、他の方法で機能しますがproduct-0.1、コミットしてからタグを適用しますproduct-0.1

一部の人々は、競合するタグをローカルで削除し、ブランチをプッシュしてからリモートタグを取得することでこれを回避しますが、煩雑でエラーが発生しやすいようです。

最小限の手間でブランチを作成するにはどうすればよいですか?

ご協力ありがとうございます


1
refs/heads/product-0.2:refs/heads/product-0.2つまり、先頭にスラッシュを付けずに、ローカル側で完全なrefspecを指定してみてください。
knittl 2012

git push origin product-0.2:product-0.2を試すことができます
vpatil

回答:


162

次のコマンドが機能するはずです。

git push origin refs/heads/product-0.2:refs/heads/product-0.2 

16
受け入れられた答え、これは曖昧さをなくす方法です。それでも、そもそも同じ名前のタグとブランチを持たない方がはるかに簡単です。いくつかのツール(SourceTreeなど)はそれにつまずいて、コマンドラインを唯一の解決策として、自分のデバイスに任されます。君たちありがとう!
youri

2
+1。:あなたがリモート名明確にする必要がある場合にも同様の事が作品refs/remotes/remote_name/remote_branch
ケルビン

1
知らないうちにタグ付きリリースに名前を付けmaster、同じ名前のブランチにプッシュできなくなりました。 git push origin refs/heads/masterトリックを実行しました(その後、そのタグを削除したため、発生しなくなりました)。
tresf 2017年

ベストプラクティスを除けば、プッシュしようとしているブランチをプッシュすることはできません。デフォルトのブランチです。どうすれば回避できますか?
Baksteen

上記の解決策が機能しない場合は、リモートヘッドを取り外してから実行してください。git push origin --refs / heads / BRANCHNAMEを削除
単独で

42

ブランチに関連付けられているタグを確認します。

git tag

私の場合、ブランチと同じ名前のタグがありました。それを削除するとうまくいきました:

git tag -d [tag-name]

1
正常に動作し、私のブランチと同じ名前のタグがありました。
ChanceVI 2018年

20

名前を変更します。

ローカルでもリモートでも、名前を変更するだけです。

タグとブランチは基本的にgitで同じです:それらはコミットへのポインターを表します。違いは、タグを静的にしたまま、コミットを行うとブランチポインターが進むことです。

ただしgit checkoutブランチまたはタグのいずれかに対してを実行できます。なぜあなたはこれらすべての倍増した名前で戦うのですか?それらを変更します。


product-0.2.0「パッチレベル」の最後の桁でタグを呼び出す必要がありましたが、それでも、命名規則があり、タグの前にブランチが作成されたときに問題が発生することはありませんでした。
youri

チームがすでにブランチの使用を開始している場合、ブランチの名前を変更することは完全ではないでしょうか?
svassr 2013

まだプッシュしていないエンティティの名前を変更します。
TheBuzzSaw

この@TheBuzzSawでよろしいですか?ローカルで私は同じものを両方とも異なる名前で持つことができるからです。
ジョンジョンピヒラー

1
上記のコマンド(選択された回答として)は質問を解決した可能性がありますが、gitの新機能なので、質問も回答も理解できませんでした。この回答は、少なくともa)アドバイスとb)説明を提供します。私は自分の質問をすることを検討したかったのですが、前にすでに尋ねたようなコメントにうんざりしています-私見:理解できない質問は初心者の質問と同じではありません。しかし、それは人生です;)
マイケルフェルト

15

ブランチと同じ名前のタグをプッシュしようとしている場合:

git push origin tag myTag

3
よくやった!これは受け入れられる答えになるはずです。常にロングテールSOの解答を読む
louis_guitton

知っておくと便利ですが、質問にはまったく答えません。著者はそれが逆であることを強調しているが、答えとしてはほとんど受け入れられないので、私はそれを否定しない。
Peter Halverson

12

今朝、正規リポジトリにプッシュしようとしたところ、次のエラーが発生しました。

$ git push origin master
error: src refspec master matches more than one.
error: failed to push some refs to 'ssh://user@host/srv/git/repo'

これは、誤ってローカルでマスタータグを作成したために発生しました。

$ git tag
master
tag1
tag2
tag3
tag4

このタグをローカルで削除したら:

git tag -d master

もう一度押すことができました。


良い説明。ローカルタグを削除する必要があります。ありがとう!
ファラオシェフ、

5

これは失敗しました:

git push $origin $branch:$branch 

これは私のために働きましたが:

git checkout $branch
git push $origin HEAD:$branch

1

ソースツリーを使用している場合は、次の手順に従ってください。

  1. タグセクションでブランチのタグ名を見つける
  2. タグ名をクリックしてタグを削除します。
  3. [リモートからタグを削除]をオンにして、[OK]をクリックしてください

もう一度変更をプッシュしてみてください。今これは動作します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.