'git Branch -av' hiển thị nhánh từ xa không còn tồn tại


168

Đâ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 nhìn thấy một 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 rằng chi 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ị ở địa phương. Làm thế nào tôi có thể xóa / loại bỏ chi nhánh này? Đây là một nỗ lực để loại bỏ nó trông như thế nào:

$ 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 'git@IP:puppet.git'

Tôi có thể kiểm tra chi nhánh sản xuất được cho là từ xa 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 biết tôi đang làm cái quái gì thế. Bất kỳ trợ giúp sẽ được đánh giá cao.


đầu ra của git branch -aa là git fetchgì?
alediaferia


Bản sao tôi đề xuất có một câu trả lời giải thích nhiều hơn so với manojlds đã làm ở đây.
Cascabel

Câu trả lời:


336

Bạn phải làm:

git remote prune origin

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

12
Đây là các nhánh theo dõi từ xa trên repo cục bộ 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

2
Hiếm khi tôi nhanh chóng tìm thấy và thực hiện một câu hỏi và câu trả lời đơn giản như vậy.
jleach

Tuyệt vời one.In i địa phương của tôi đã nhìn thấy các chi nhánh làm lạ mà không có liên quan đến việc repo cơ sở mã Khi tôi chạy lệnh này, nó điều chỉnh chi nhánh có nguồn gốc địa phương của tôi và sau đó tôi thêm .thanks chủ thượng nguồn
Ankur Srivastava

54

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

Đầu tiên. Khi bạn làm những việc như

$ git chi nhánh -a

các hoạt động được thực hiện trên repo cục bộ của bạn KHÔNG phải máy tính từ xa. Nói cách khác, repo địa phương của bạn đang báo cáo tất cả các chi nhánh được biết đến. Đây có thể là các nhánh cục bộ (như 'chủ') hoặc các nhánh từ xa mà nó đã tìm nạp từ xa. Kể từ lần tìm nạp cuối cùng, nhánh 'sản xuất' 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 nguồn gốc cắt tỉa từ xa

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

Lệnh 'git đẩy gốc: sản xuất' được sử dụng để xóa chi nhánh khỏi repo git 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, một 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.

Đây là một liên kết tóm tắt các lệnh này.

Vấn đề thứ hai liên quan đến thanh toán.

Khi kiểm tra một chi nhánh, bạn muốn làm như vậy từ một chi nhánh địa phương , không phải chi nhánh từ xa. Đó là lý do tại sao bạn nhận được lỗi về một ĐẦU tách ra. Các repo git-nốt có một lời giải thích tốt về vấn đề trong chi tiết gory. Về cơ bản cụm từ chính là

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

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

Dễ thôi, bạn tạo một chi nhánh địa phương, tại thời điểm kiểm tra chi nhánh từ xa.

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


20
git remote prune origin

là đúng, chỉ cần thêm bạn có thể sử dụng --dry-runtùy chọn, báo cáo những nhánh nào sẽ được cắt từ repo cục bộ của bạn, nhưng thực tế không cắt tỉa chúng

git remote prune origin --dry-run
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.