Khi bạn sử dụng git push origin :staleStuff, nó sẽ tự động loại bỏ origin/staleStuff, vì vậy khi bạn chạy git remote prune origin, bạn đã cắt tỉa một số nhánh bị người khác cắt bỏ. Có nhiều khả năng đồng nghiệp của bạn bây giờ cần phải chạy git pruneđể loại bỏ các nhánh bạn đã loại bỏ.
Vì vậy, những gì chính xác git remote prunelàm gì? Ý tưởng chính: các nhánh cục bộ (không phải các nhánh theo dõi) không được chạm vào bằng git remote prunelệnh và nên được gỡ bỏ theo cách thủ công.
Bây giờ, một ví dụ trong thế giới thực để hiểu rõ hơn:
Bạn có một kho lưu trữ từ xa với 2 nhánh: mastervàfeature . Giả sử rằng bạn đang làm việc trên cả hai nhánh, do đó, bạn có các tham chiếu này trong kho lưu trữ cục bộ của mình (tên tham chiếu đầy đủ được cung cấp để tránh bất kỳ sự nhầm lẫn nào):
refs/heads/master (tên ngắn master)
refs/heads/feature (tên ngắn feature)
refs/remotes/origin/master (tên ngắn origin/master)
refs/remotes/origin/feature(tên viết tắt origin/feature)
Bây giờ, một kịch bản điển hình:
- Một số nhà phát triển khác hoàn thành tất cả công việc trên
feature, hợp nhất nó vào mastervà xóafeature nhánh khỏi kho lưu trữ từ xa.
- Theo mặc định, khi bạn làm
git fetch(hoặcgit pull ), không có tham chiếu nào bị xóa khỏi kho lưu trữ cục bộ của bạn, vì vậy bạn vẫn có tất cả 4 tham chiếu đó.
- Bạn quyết định dọn dẹp chúng và chạy
git remote prune origin .
- git phát hiện rằng
featurechi nhánh không còn tồn tại, vì vậy refs/remotes/origin/featurelà một cũ chi nhánh cần được loại bỏ.
- Bây giờ bạn có 3 tham chiếu, bao gồm
refs/heads/feature, vì git remote prunekhông loại bỏ bất kỳ refs/heads/*tham chiếu nào .
Có thể xác định các nhánh cục bộ, liên kết với các nhánh theo dõi từ xa, bằng branch.<branch_name>.mergetham số cấu hình. Tham số này không thực sự cần thiết cho bất kỳ thứ gì hoạt động (có thể là ngoại trừ git pull), vì vậy nó có thể bị thiếu.
(được cập nhật với ví dụ và thông tin hữu ích từ các bình luận)
git remote show originvà cái nhìn đối với bất kỳ chi nhánh đánh dấustale