Git từ xa đã bị xóa, nhưng nó vẫn xuất hiện trong 'nhánh -a'


552

Hãy nói rằng tôi có một chi nhánh có tên coolbranchtrong kho lưu trữ của tôi.

Bây giờ, tôi quyết định xóa nó (cả từ xa và cục bộ) với:

git push origin :coolbranch
git branch -D coolbranch

Tuyệt quá! Bây giờ chi nhánh thực sự bị xóa.

Nhưng khi tôi chạy

git branch -a

Tôi vẫn nhận được:

remotes/origin/coolbranch

Một điều cần chú ý là khi tôi sao chép một kho lưu trữ mới, mọi thứ đều ổn và git branch -akhông hiển thị chi nhánh.

Tôi muốn biết - có cách nào để xóa chi nhánh khỏi branch -adanh sách mà không cần sao chép một trường hợp mới không?



58
Nếu bạn git fetch -p(hoặc git pull -p) thì các nhánh từ xa sẽ được cắt tỉa.
yoyo

Câu trả lời:


688

git remote prune origin, như được đề xuất trong câu trả lời khác, sẽ loại bỏ tất cả các nhánh cũ như vậy. Đó có thể là những gì bạn muốn trong hầu hết các trường hợp, nhưng nếu bạn muốn xóa chi nhánh theo dõi từ xa cụ thể đó, bạn nên làm:

git branch -d -r origin/coolbranch

(Rất -rdễ quên ...)

-rtrong trường hợp này sẽ "Liệt kê hoặc xóa (nếu được sử dụng với -d) các nhánh theo dõi từ xa." theo tài liệu Git được tìm thấy ở đây: https://git-scm.com/docs/git-branch


11
git remote prune originhoặc bất kỳ hình thức git fetch --prunegắn cờ nào không hoạt động đối với tôi trong trường hợp của tôi. ... Nhưng git branch -d -r origin/feature/branch-nameđã làm việc. Tôi không chắc liệu nó có liên quan gì đến nó trong featurekhông gian tên (luồng git) không nhưng đó là cách nó đi xuống, trong trường hợp bất kỳ nhân viên Google nào thấy điều đó xảy ra với họ.
Misterparker

8
Có một lý do này là cần thiết? Có vẻ rất tệ khi để những tên nhánh không tồn tại này trong danh sách và không tự động cắt tỉa chúng.
akronymn

296

Thử:

git remote prune origin

Từ tài liệu từ xa Git :

tỉa

Xóa tất cả các nhánh theo dõi từ xa cũ dưới <name>. Các nhánh cũ này đã bị xóa khỏi kho lưu trữ từ xa được tham chiếu bởi <name>, nhưng vẫn có sẵn cục bộ trong "điều khiển từ xa / <name>".

Với tùy chọn --dry-run, hãy báo cáo những nhánh nào sẽ được cắt tỉa, nhưng không thực sự cắt tỉa chúng.


1
Để hoàn thiện: nó phải tương tự như git pull --pruneđược đề cập tại stackoverflow.com/a/17983126/94687 Và:git remote update --prune
imz - Ivan Zakharyaschev

230

Đừng quên điều tuyệt vời

git fetch -p

mà lấy và cắt tỉa tất cả các nguồn gốc.


Để hoàn thiện: nó phải giống git remote prune originvà tương tự như git pull --pruneđược đề cập tại stackoverflow.com/a/6127884/94687stackoverflow.com/a/17983126/94687 . Và:git remote update --prune
imz - Ivan Zakharyaschev

2
Nhưng các nhánh sẽ vẫn hiển thị nếu bạn chạygit branch -a
Nikhil Sahu

1
@NikhilSahu: Tôi không thấy các chi nhánh từ xa đã bị xóa nữa vớigit branch -a
user276648

20

Trong trường hợp cụ thể của chúng tôi, chúng tôi sử dụng Stash làm kho lưu trữ Git từ xa. Chúng tôi đã thử tất cả các câu trả lời trước đó và không có gì hiệu quả. Chúng tôi cuối cùng đã phải làm như sau:

git branch –D branch-name (delete from local)
git push origin :branch-name (delete from remote)

Sau đó, khi người dùng kéo các thay đổi, họ cần thực hiện các thao tác sau:

git fetch -p

git branch -d branch-nameđã làm cho tôi. Thông báo -Dcho -d. Trong thực tế khi tôi thử với chữ hoa chữ D, -Dnó đã tạo ra một nhánh mới có tên -D
RP-

1
"-D" là một cách buộc xóa bất kể trạng thái đẩy hoặc hợp nhất của nó. Rõ ràng là cẩn thận khi sử dụng nó, nhưng trong rất nhiều trường hợp, nó đã là cần thiết.
Shadowvail

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.