Khi tôi làm git fetch origin
và nguồn gốc có một nhánh bị xóa, nó dường như không cập nhật nó trong kho lưu trữ của tôi. Khi tôi làm git branch -r
nó vẫn hiển thị origin/DELETED_BRANCH
.
Làm thế nào tôi có thể sửa lỗi này?
Khi tôi làm git fetch origin
và nguồn gốc có một nhánh bị xóa, nó dường như không cập nhật nó trong kho lưu trữ của tôi. Khi tôi làm git branch -r
nó vẫn hiển thị origin/DELETED_BRANCH
.
Làm thế nào tôi có thể sửa lỗi này?
Câu trả lời:
Bạn cần làm như sau
git fetch -p
Điều này sẽ cập nhật cơ sở dữ liệu cục bộ của các chi nhánh từ xa.
origin
ngã ba của tôi : git fetch -p origin
Khi đó, khi đó git branch -r
nhánh từ xa không tồn tại không còn xuất hiện nữa.
git remote prune origin
và tương tự như git pull --prune
được đề cập tại stackoverflow.com/a/6127884/94687 và stackoverflow.com/a/17983126/94687 .
[deleted] (none) -> origin/ < branch name >
và chi nhánh vẫn được hiển thị trên repo địa phương bất kỳ ý tưởng tại sao?
git branch
vẫn hiển thị các chi nhánh được cho là đã bị xóa.
Từ http://www.gitguys.com/topics/adding-and-removing-remote-branches/
Sau khi ai đó xóa một nhánh khỏi kho lưu trữ từ xa, git sẽ không tự động xóa các nhánh kho lưu trữ cục bộ khi người dùng thực hiện thao tác git pull hoặc git fetch. Tuy nhiên, nếu người dùng muốn xóa tất cả các nhánh theo dõi khỏi kho lưu trữ cục bộ đã bị xóa trong kho lưu trữ từ xa, họ có thể gõ:
nguồn gốc git từ xa
Như một lưu ý, -p param từ git fetch -p
thực sự có nghĩa là "cắt tỉa".
Dù bạn chọn cách nào, các nhánh từ xa không tồn tại sẽ bị xóa khỏi kho lưu trữ cục bộ của bạn.
Bạn cần làm như sau
git fetch -p
để đồng bộ hóa danh sách chi nhánh của bạn. Các nhãn hiệu git nói
-p
,--prune
Sau khi tìm nạp, hãy xóa mọi tham chiếu theo dõi từ xa không còn tồn tại trên điều khiển từ xa. Các thẻ không được cắt tỉa nếu chúng được tìm nạp chỉ vì thẻ mặc định tự động theo dõi hoặc do một--tags
tùy chọn. Tuy nhiên, nếu các thẻ được tìm nạp do một refspec rõ ràng (trên dòng lệnh hoặc trong cấu hình từ xa, ví dụ nếu điều khiển từ xa được sao chép với--mirror
tùy chọn), thì chúng cũng có thể được cắt tỉa.
Cá nhân tôi thích sử dụng git fetch origin -p --progress
vì nó hiển thị một chỉ báo tiến độ.
Về git fetch -p
, hành vi của nó đã thay đổi trong Git 1.9 và chỉ Git 2.9.x / 2.10 phản ánh điều đó.
Xem cam kết 9e70233 (ngày 13 tháng 6 năm 2016) của Jeff King ( peff
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 1c22105 , ngày 06 tháng 7 năm 2016)
fetch
: tài liệu cắt tỉa xảy ra trước khi tìm nạpĐiều này đã được thay đổi trong 10a6cc8 (
fetch --prune
: Chạy prune trước khi tìm nạp, 2014-01 / 02 ), nhưng dường như không ai trong cuộc thảo luận đó nhận ra rằng chúng tôi đang quảng cáo "sau" một cách rõ ràng.
Vì vậy, các tài liệu bây giờ nêu:
Trước khi tìm nạp, hãy xóa mọi tham chiếu theo dõi từ xa không còn tồn tại trên điều khiển từ xa
Đó là vì:
Khi chúng ta có một nhánh theo dõi từ xa có tên "
frotz/nitfol
" từ một lần tìm nạp trước đó và hiện tại thượng nguồn có một nhánh có tên "frotz
", việc tìm nạp sẽ không thể xóa "frotz/nitfol
" bằng "git fetch --prune
" từ thượng nguồn. git sẽ thông báo cho người dùng sử dụng "git remote prune
" để khắc phục sự cố.Thay đổi cách "
fetch --prune
" hoạt động bằng cách di chuyển thao tác cắt tỉa trước khi thao tác tìm nạp. Bằng cách này, thay vì cảnh báo người dùng về xung đột, nó sẽ tự động sửa nó.