2012-01-07 31 views
109

Đây có lẽ là một câu hỏi ngớ ngẩn, nhưng tôi hoàn toàn mới với git và đang thấy một chi nhánh từ xa không còn tồn tại nữa.'git branch -av' hiển thị chi nhánh từ xa không còn tồn tại

$ git branch -a 
* master 
    remotes/origin/master 
    remotes/origin/production 

Tôi không tin nhánh sản xuất tồn tại từ xa và không thể hiểu tại sao nó vẫn hiển thị cục bộ. Làm cách nào để xóa/xóa nhánh này? Đây là những gì một nỗ lực để xoá bỏ nó trông giống như:

$ git push origin :production 

error: unable to push to unqualified destination: production 
The destination refspec neither matches an existing ref on the remote nor 
begins with refs/, and we are unable to guess a prefix based on the source ref. 
error: failed to push some refs to '[email protected]:puppet.git' 

tôi có thể kiểm tra các chi nhánh sản xuất được cho là xa xôi nhưng có được điều này:

$ git checkout origin/production 
Note: checking out 'origin/production'. 

You are in 'detached HEAD' state. You can look around, make experimental 
changes and commit them, and you can discard any commits you make in this 
state without impacting any branches by performing another checkout. 

If you want to create a new branch to retain commits you create, you may 
do so (now or later) by using -b with the checkout command again. Example: 

    git checkout -b new_branch_name 

HEAD is now at c323996... added powerdns module, no really 

tôi không có đầu mối những gì heck tôi đang làm. Bất kỳ trợ giúp sẽ được đánh giá cao.

+0

đầu ra của 'git branch -a' sau' git fetch' là gì? – alediaferia

+2

vẫn giữ nguyên. – CarpeNoctem

+0

có thể trùng lặp của [Làm cách nào để xóa chi nhánh từ xa trong GitHub?] (Http://stackoverflow.com/questions/8754183/how-to-forcefully-delete-remote-branch-in-github) – Cascabel

Trả lời

210

Bạn phải làm:

git remote prune origin 
+4

Cảm ơn bạn đã làm việc! Bạn có thể giải thích về những gì đang diễn ra đằng sau hậu trường không? – CarpeNoctem

+7

Đây là các chi nhánh theo dõi từ xa trên repo địa phương của bạn và bạn phải xóa chúng nếu các nhánh bị xóa trên repo từ xa. – manojlds

+0

bạn đã thực hiện một ngày của tôi. –

40

Vì vậy, có hai vấn đề. Trong cả hai trường hợp, hãy nhớ Git được phân phối.

Trước tiên. Khi bạn làm những việc như

$ git branch -a

các hoạt động được thực hiện trên repo địa phương của bạn KHÔNG máy tính từ xa. Nói cách khác, repo địa phương của bạn báo cáo tất cả các chi nhánh đã biết. Đây có thể là các nhánh địa phương (như 'master') hoặc các nhánh xa mà nó có tìm nạp từ điều khiển từ xa. Kể từ lần tìm nạp cuối cùng, chi nhánh 'production' của repo từ xa đã thay đổi, nhưng repo cục bộ của bạn không biết điều này. Câu trả lời từ manojlds, là chính xác. Chạy

$ git mận xa nguồn gốc

để loại bỏ các chi nhánh cũ.

Lệnh 'git push origin: production' được sử dụng để xóa chi nhánh khỏi git repo của máy tính từ xa. Không phải repo địa phương của bạn. Trong trường hợp này, người khác đã xóa chi nhánh trên git repo của máy tính từ xa, vì vậy bạn thấy thông báo lỗi này.

Dưới đây là link tóm tắt các lệnh này.

Vấn đề thứ hai đề cập đến thanh toán.

Khi thanh toán chi nhánh, bạn muốn làm như vậy từ chi nhánh địa phương, không phải chi nhánh từ xa. Đó là lý do tại sao bạn gặp lỗi về HEAD tách rời. Các git-notes repo có một lời giải thích tốt về vấn đề trong chi tiết đẫm máu. Về cơ bản, cụm từ khóa là

Tuy nhiên, khi bạn kiểm tra mọi thứ không đúng, địa phương, tên chi nhánh, thì HEAD không còn là tham chiếu tượng trưng cho bất kỳ thứ gì. Thay vào đó, nó thực sự chứa hàm băm SHA-1 (id cam kết) của cam kết mà bạn đang chuyển sang.

Bây giờ, làm thế nào để kiểm tra chi nhánh địa phương, giống như chi nhánh ở xa?

Dễ dàng, bạn tạo một chi nhánh tại địa phương, tại thời điểm thanh toán chi nhánh từ xa.

$ git checkout -b my_local_branch nguồn gốc/sản xuất

10
git remote prune origin 

là đúng, chỉ cần thêm bạn có thể sử dụng --dry-run hộp thoại này có báo cáo gì chi nhánh sẽ được cắt tỉa từ repo địa phương của bạn, nhưng thực sự doesnt prune them

git remote prune origin --dry-run 
Các vấn đề liên quan