git push local branch có cùng tên với remote tag


110

Tôi đang cố gắng đẩy một nhánh cục bộ mới product-0.2đến từ xa nơi đã có một thẻ có cùng tên (nhưng bản thân nhánh đó không tồn tại)

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'

Giống với:

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

Mặc dù cách khác vẫn hoạt động, ví dụ như tạo một nhánh product-0.1, hãy cam kết trên đó rồi áp dụng một thẻ product-0.1.

Một số người giải quyết vấn đề này bằng cách xóa cục bộ thẻ xung đột, sau đó đẩy nhánh, sau đó truy xuất thẻ từ xa, nhưng nó có vẻ rườm rà và dễ xảy ra lỗi.

Làm thế nào tôi có thể tạo chi nhánh của mình với ít phiền phức nhất?

Cảm ơn vì đầu vào của bạn


1
Hãy thử refs/heads/product-0.2:refs/heads/product-0.2, tức là không có dấu gạch chéo ở đầu và cũng cung cấp bản refspec đầy đủ ở phía cục bộ.
jerttl

Có thể thử git push nguồn gốc sản phẩm-0.2: sản phẩm-0.2
vpatil

Câu trả lời:


162

Lệnh sau sẽ hoạt động.

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

16
Câu trả lời được chấp nhận, đây là cách để phân biệt. Tuy nhiên, cách dễ dàng hơn là không có các thẻ và nhánh trùng tên ngay từ đầu. Một số công cụ (ví dụ: SourceTree) sẽ vấp phải nó và bạn sẽ được để lại cho các thiết bị của riêng mình, với dòng lệnh là giải pháp duy nhất. Cảm ơn các bạn!
youri

2
+1. Một điều tương tự hoạt động khi bạn cần để tên từ xa disambiguate:refs/remotes/remote_name/remote_branch
Kelvin

1
Đã vô tình đặt tên cho một bản phát hành được gắn thẻ mastervà không thể đẩy đến chi nhánh có cùng tên. git push origin refs/heads/masterđã thực hiện thủ thuật (sau đó tôi đã xóa thẻ đó để nó ngừng xảy ra).
tresf

Ngoài các phương pháp hay nhất, bạn vẫn không thể đẩy nhánh mà bạn đang cố đẩy đến là nhánh mặc định .. Làm cách nào để chúng tôi giải quyết vấn đề đó?
Baksteen

Nếu giải pháp trên không hoạt động, vui lòng thực hiện sau khi tháo đầu điều khiển từ xa. git push origin - xóa refs / heads / BRANCHNAME
alones

42

Xác minh những thẻ nào được liên kết với chi nhánh của bạn:

git tag

Trong trường hợp của tôi, tôi có một thẻ có cùng tên của chi nhánh. Xóa nó đã hoạt động:

git tag -d [tag-name]

1
Hoạt động tốt, có thẻ trùng tên với chi nhánh của tôi.
ChanceVI

20

Thay đổi tên.

Cho dù bạn làm điều đó cục bộ hay từ xa, chỉ cần thay đổi tên.

Về cơ bản, một thẻ và một nhánh giống nhau trong git: chúng đại diện cho một con trỏ đến một cam kết. Sự khác biệt là con trỏ nhánh sẽ tăng lên khi bạn thực hiện cam kết, trong khi thẻ vẫn ở trạng thái tĩnh.

Tuy nhiên , bạn có thể thực hiện git checkouttrên một nhánh hoặc một thẻ. Tại sao bạn lại chiến đấu với tất cả những cái tên nhân đôi này? Thay đổi chúng.


Lẽ ra / lẽ ra phải gọi thẻ product-0.2.0có chữ số cuối cùng cho 'cấp bản vá' nhưng chúng tôi vẫn có quy ước đặt tên và chúng tôi đã không gặp rắc rối trong quá khứ khi nhánh được tạo trước thẻ.
youri

Nếu nhóm đã bắt đầu sử dụng chi nhánh sẽ không hữu ích khi đổi tên nó?
svassr

Thay đổi tên của thực thể mà bạn chưa đẩy.
TheBuzzSaw 10/1213

Bạn có chắc chắn về điều này @TheBuzzSaw không? Bởi vì địa phương tôi có thể có cả hai cùng một tên, như những thứ khác nhau.
John John Pichler

1
Mặc dù lệnh (như câu trả lời đã chọn) ở trên có thể đã giải quyết câu hỏi - là người mới sử dụng git, tôi không hiểu câu hỏi cũng như câu trả lời. Câu trả lời NÀY ít nhất đưa ra a) lời khuyên và b) lời giải thích - thậm chí là khuyến nghị cho tương lai. Tôi đã cân nhắc đặt câu hỏi của riêng mình, nhưng tôi mệt mỏi với những bình luận như đã được hỏi trước đây - imho: một câu hỏi không thể hiểu được sẽ không giống như một câu hỏi dành cho người mới bắt đầu. Nhưng đó là cuộc sống;)
Michael Felt

15

Nếu bạn đang cố đẩy một thẻ có cùng tên của một nhánh:

git push origin tag myTag

3
làm tốt lắm thưa ông! đây phải là câu trả lời được chấp nhận. luôn luôn đọc đuôi dài SO câu trả lời
louis_guitton

Thật hữu ích khi biết, nhưng hoàn toàn không trả lời được câu hỏi. Tôi sẽ không phản đối nó, vì tác giả nhấn mạnh rằng đó là cách khác, nhưng khó có thể chấp nhận được như câu trả lời.
Peter Halverson

12

Tôi đã cố gắng đẩy lên kho lưu trữ hợp quy sáng nay và gặp lỗi sau:

$ 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'

Điều này xảy ra vì tôi đã vô tình tạo một thẻ chính cục bộ:

$ git tag
master
tag1
tag2
tag3
tag4

Khi tôi đã xóa cục bộ thẻ này:

git tag -d master

Tôi đã có thể đẩy một lần nữa.


Lời giải thích hay. Cần xóa thẻ cục bộ. Cảm ơn!
Chef Pharaoh

5

Điều này không thành công:

git push $origin $branch:$branch 

Trong khi điều này làm việc cho tôi:

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

1

Nếu bạn đang sử dụng cây nguồn thì hãy làm theo các bước sau.

  1. tìm Tên thẻ của chi nhánh trong phần thẻ
  2. nhấp vào Thẻ xóa tên thẻ.
  3. Đảm bảo bạn chọn "xóa thẻ từ điều khiển từ xa" và nhấp vào ok

Hãy thử lại để đẩy các thay đổi của bạn. bây giờ điều này sẽ hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.