Giữa các thông tin được trình bày bởi git help fetch
, có một mục nhỏ này:
-p, --prune
After fetching, remove any remote-tracking branches which no longer exist on the remote.
Vì vậy, có lẽ, git fetch -p
những gì bạn đang tìm kiếm?
EDIT: Ok, đối với những người vẫn còn tranh luận về câu trả lời này 3 năm sau thực tế, đây là một ít thông tin về lý do tại sao tôi trình bày câu trả lời này ...
Đầu tiên, OP nói rằng họ muốn "loại bỏ cả những nhánh cục bộ đã được tạo ra từ những nhánh từ xa đó [không còn nữa trên điều khiển từ xa]". Điều này không rõ ràng có thể trong git
. Đây là một ví dụ.
Giả sử tôi có một repo trên một máy chủ trung tâm và nó có hai nhánh, được gọi A
và B
. Nếu tôi sao chép repo đó vào hệ thống cục bộ của mình, bản sao của tôi sẽ có các ref địa phương (chưa phải chi nhánh thực tế) được gọi origin/A
và origin/B
. Bây giờ hãy nói tôi làm như sau:
git checkout -b A origin/A
git checkout -b Z origin/B
git checkout -b C <some hash>
Sự thật thích hợp ở đây là vì một số lý do tôi đã chọn tạo một chi nhánh trên repo địa phương có tên khác với nguồn gốc của nó và tôi cũng có một chi nhánh địa phương chưa tồn tại trên repo gốc.
Bây giờ chúng ta hãy nói rằng tôi loại bỏ cả A
và B
chi nhánh trên repo từ xa và cập nhật repo địa phương của tôi ( git fetch
của một số hình thức), gây refs địa phương của tôi origin/A
và origin/B
biến mất. Bây giờ, repo địa phương của tôi có ba chi nhánh vẫn còn, A
, Z
, và C
. Không ai trong số này có một nhánh tương ứng trên repo từ xa. Hai trong số chúng được "tạo ra từ ... các nhánh từ xa", nhưng ngay cả khi tôi biết rằng đã từng có một nhánh được gọi là B
nguồn gốc, tôi không có cách nào để biết rằngZ
được tạo ra từB
, bởi vì nó đã được đổi tên trong quá trình, có lẽ vì một lý do tốt. Vì vậy, thực sự, nếu không có một số siêu dữ liệu nguồn gốc của quá trình ghi lại quá trình bên ngoài hoặc một người biết lịch sử, không thể biết được trong số ba nhánh, nếu có, OP đang nhắm mục tiêu để loại bỏ. Không có một số thông tin bên ngoài git
không tự động duy trì cho bạn,git fetch -p
sẽ gần đến mức bạn có thể nhận được và bất kỳ phương pháp tự động nào để thử nghĩa đen những gì OP yêu cầu đều có nguy cơ xóa quá nhiều chi nhánh hoặc thiếu một số điều mà OP sẽ làm muốn xóa.
Cũng có những kịch bản khác, chẳng hạn như nếu tôi tạo ra ba nhánh riêng biệt origin/A
để kiểm tra ba cách tiếp cận khác nhau đối với một cái gì đó, và sau đó origin/A
biến mất. Bây giờ tôi có ba nhánh, rõ ràng không thể khớp với tên khôn ngoan, nhưng chúng được tạo ra từ đó origin/A
, và vì vậy một cách giải thích theo nghĩa đen của câu hỏi OP sẽ yêu cầu loại bỏ cả ba. Tuy nhiên, điều đó có thể không được mong muốn, nếu bạn thậm chí có thể tìm ra một cách đáng tin cậy để phù hợp với họ ...