Lấy từ nguồn gốc với các chi nhánh từ xa bị xóa?


440

Khi tôi làm git fetch originvà 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 -rnó 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:


810

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.


1
Cảm ơn rât nhiều. Tôi đã tự xóa những nhánh đó trước đây.
Maksim Dmitriev

4
Vì một số lý do, lệnh của bạn không hoạt động, nhưng lệnh này đã làm cho một nhánh từ xa không tồn tại trong originngã 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.
oldfartdeveloper

11
Để 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 .
imz - Ivan Zakharyaschev

6
Các bạn khi tôi làm điều này nó nói [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?
Buddhi741

4
Tôi nhận được một thông báo nói rằng các chi nhánh của tôi đã bị xóa, nhưng chạy git branchvẫn hiển thị các chi nhánh được cho là đã bị xóa.
sdfsdf

91

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 -pthự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.


Tôi thích điều này vì nó không lấy bất cứ thứ gì mới.
Marek R

30

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 --tagstù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 --mirrortù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 --progressvì nó hiển thị một chỉ báo tiến độ.



6

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ó.

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.