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 prune
là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 prune
lệ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: master
và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 master
và 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
feature
chi nhánh không còn tồn tại, vì vậy refs/remotes/origin/feature
là 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 prune
khô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>.merge
tham 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 origin
và cái nhìn đối với bất kỳ chi nhánh đánh dấustale