2012-02-21 40 views
68

Tôi đang cố gắng để đẩy một chi nhánh địa phương mới product-0.2 để xa nơi đã có một thẻ có cùng tên (nhưng chi nhánh tự nó không tồn tại)git push chi nhánh địa phương với cùng một tên như thẻ từ xa

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' 

Cùng với:

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

Mặc dù cách khác xung quanh nó hoạt động, ví dụ như tạo một chi nhánh product-0.1, cam kết trên đó sau đó áp dụng thẻ product-0.1.

Một số người làm việc xung quanh việc này bằng cách xóa thẻ xung đột cục bộ, sau đó đẩy chi nhánh, sau đó truy xuất thẻ từ xa, nhưng có vẻ như cồng kềnh và dễ bị lỗi.

Làm cách nào để tạo chi nhánh của tôi với ít phiền toái nhất?

Cảm ơn bạn đã nhập

+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 hàng đầu và cũng cho toàn bộ refspec ở phía địa phương. – knittl

+0

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

Trả lời

103

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

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

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 để không có thẻ và chi nhánh có cùng tên ở địa điểm đầu tiên. Một số công cụ (ví dụ: SourceTree) sẽ vấp ngã trên đó và bạn sẽ được để lại cho các thiết bị của riêng bạn, với dòng lệnh là giải pháp duy nhất. Cảm ơn các bạn! – youri

+0

Det var sa lite sa :) – ralphtheninja

+1

+1.Một điều tương tự cũng hoạt động khi bạn cần định hướng các tên từ xa: 'refs/remotes/remote_name/remote_branch' – Kelvin

13

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. Một thẻ và một nhánh về cơ bản là giống nhau trong git: chúng đại diện cho một con trỏ tới một cam kết. Sự khác biệt là con trỏ nhánh tiến lên khi bạn thực hiện các cam kết, trong khi thẻ vẫn tĩnh. Tuy nhiên, bạn có thể thực hiện git checkout trên một chi nhánh hoặc thẻ. Tại sao bạn lại chiến đấu với tất cả những cái tên tăng gấp đôi này? Thay đổi chúng.

+0

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

+0

Nếu nhóm đã bắt đầu sử dụng chi nhánh thì sẽ không thành công khi đổi tên nó? – svassr

+0

Thay đổi tên của đối tượng bạn chưa đẩy. – TheBuzzSaw

1

này thất bại:

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 
16

Xác nhận thẻ nào được kết hợp 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 có cùng tên của chi nhánh. Xóa nó làm việc:

git tag -d [tag-name] 
3

Tôi đã cố gắng để đẩy đến một kho kinh điển sáng nay và đã nhận lỗi sau:

$ git push origin master 
error: src refspec master matches more than one. 
error: failed to push some refs to 'ssh://[email protected]/srv/git/repo' 

Điều này xảy ra bởi vì tôi đã vô tình tạo ra một thẻ thạc sĩ tại địa phương:

$ git tag 
master 
tag1 
tag2 
tag3 
tag4 

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

git tag -d master 

Tôi có thể đẩy lại.

+0

Giải thích tốt. Cần xóa thẻ cục bộ. Cảm ơn! –

Các vấn đề liên quan