2011-02-03 30 views
18

Đừng hỏi tôi làm thế nào nhưng tôi quản lý để có được vô tình các chi nhánh từ xa sau trong một kho git:Làm thế nào để loại bỏ xa nguồn gốc/refs/con/chủ

$ git branch -r 
    origin/HEAD -> origin/master 
    origin/master 
    origin/refs/heads/master 

Tất cả đều được trỏ đến cùng cam kết. Làm cách nào để xóa danh sách không cần thiết cho origin/refs/heads/master?

Tôi cố gắng để làm như sau

$ git push origin :refs/heads/master 
error: dst refspec refs/heads/master matches more than one. 

Nhưng khi hiển thị, điều này mang lại một lỗi.

Trả lời

15

Giải pháp là để xóa các chi nhánh refs/heads/refs/heads/master

git push origin :refs/heads/refs/heads/master 
39

Đó không thực sự là nhánh trên điều khiển từ xa - nó chỉ là một tham chiếu cục bộ yêu cầu đại diện cho một cái gì đó trên điều khiển từ xa, giống như origin/master đại diện cho nhánh chính trên remote. Tên đầy đủ của ref là refs/remotes/origin/refs/heads/master. Tất cả những gì bạn phải làm để xóa nó là:

git branch -r -d origin/refs/heads/master 

Thật mơ hồ khi bạn cố gắng đẩy điều này (nhưng bạn phải cố gắng hết sức để làm như vậy). Nếu bạn đã làm, tôi muốn chỉ đơn giản là liệt kê các refs xuất xứ:

git ls-remote origin 

và sau đó, nếu có bất cứ điều gì ngu ngốc đó, sử dụng git push origin :<refname> để thoát khỏi nó.

P.S. Nếu điều này không làm điều đó cho bạn, bạn sẽ muốn sử dụng git for-each-ref để xem tất cả các lần chỉnh sửa của mình và có thể git ls-remote origin để xem tất cả các từ xa và theo dõi xuống chính xác mà mọi thứ không thuộc về tên đầy đủ của họ.

+0

Hmm, nó là nguồn gốc/refs/heads/refs/heads/master và tôi đã xóa nó với 'git push origin: refs/heads/refs/heads/master' –

+0

@Peter: vâng, đó là những gì tôi đoán đoạn đầu tiên. Tôi ấn tượng rằng bạn đã quản lý nó vào điều khiển từ xa; nó đã cho tôi một chút để tìm ra cách để làm điều đó bản thân mình! Mừng vì bạn đã giải quyết được điều đó. – Cascabel

4

Đó là

git branch -r -d origin/ref/heads/master 

thay vì

git branch -r -d origin/refs/heads/master 

ở phần code để xóa chi nhánh. Có sự khác biệt trong từ ref trong mã.

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