Git: cập nhật thông tin chi nhánh từ xa


125

Trong kho git, một nhánh từ xa tôi không theo dõi đã bị xóa. Khi tôi gõ

git branch -r

nhánh bị xóa vẫn xuất hiện (và tôi có thể kiểm tra nó)

Tôi phải chạy lệnh git nào để cập nhật thông tin này?

Câu trả lời:


39

Nếu bạn thực hiện một cái gì đó như

git branch -d -r remote_name/branch_name

bạn chỉ loại bỏ kiểm tra địa phương của bạn. Lệnh này không làm gì với kho lưu trữ từ xa, đó là lý do tại sao nó vẫn hiển thị.

Giải pháp:

git push origin :branch_name

sẽ xóa nhánh từ xa (lưu ý ':') và

git branch -d branch_name

sẽ loại bỏ kiểm tra địa phương của bạn.

( Tham khảo )


146
Bạn cũng có thể chạy 'git nguồn gốc cắt tỉa từ xa' để dọn sạch các tài liệu tham khảo từ xa của bạn.
cmcginty

3
Điều đó sẽ loại bỏ tất cả các nhánh không còn được theo dõi bởi kho lưu trữ từ xa. Vì vậy, chỉ cần cẩn thận.
Garrett Hyde

4
Tôi nghĩ cũng hữu ích khi biết rằng, mặc dù dài dòng hơn một chút, bạn cũng có thể sử dụng git push <remote> --delete <branchname>để xóa các nhánh từ xa.
AeroCross

Điều này thường hoạt động, nhưng tôi gặp phải một tình huống ngày hôm nay khi danh sách từ xa không được cập nhật, vì vậy tôi đã cố gắng xóa một nhánh không có ở đó. Do đó, giải pháp của @Flo dưới đây được yêu cầu trước tiên.
dgo

284

Nếu đó là các nhánh trong kho lưu trữ từ xa đã bị xóa và bạn muốn cập nhật tất cả các nhánh theo dõi từ xa cục bộ cùng một lúc, bạn có thể sử dụng

$ git remote prune <remotename>

để xóa tất cả các nhánh theo dõi từ xa cũ cho một điều khiển từ xa nhất định (tức là các nhánh theo các nhánh đã bị xóa trong kho lưu trữ từ xa).

Xem git remotetài liệu.


Cảm ơn bạn @Casey và @Jakub vì câu trả lời của bạn! Làm thế nào mà thông tin chi nhánh từ xa được lưu trữ cục bộ không được cập nhật vào lần sử dụng tiếp theo git fetch?
JJD

4
@JJD: Bởi vì bạn có thể đã dựa vào công việc của mình trên nhánh từ xa không còn ở đây nữa. Do đó, nó biến mất mà không yêu cầu được cho là một ý tưởng tồi. Đó là lý do tại sao bạn cần cắt tỉa rõ ràng các nhánh theo dõi từ xa.
Jakub Narębski

Có phải "git gc" cũng dọn sạch các nhánh từ xa cũ không?
James Wald

@JamesWald: Không, không. git gcchỉ đóng gói các đối tượng và refs, và xóa các đối tượng không được ước tính trong khi ở đó (với một số giới hạn an toàn).
Jakub Narębski

186
git remote update --prune

Nên làm mới tất cả các nhánh từ xa, thêm các nhánh mới và xóa các nhánh bị loại bỏ.

Chỉnh sửa: Lệnh cập nhật từ xa về cơ bản tìm nạp danh sách các nhánh trên điều khiển từ xa. Các --prunetùy chọn sẽ thoát khỏi bạn địa phương , ngành theo dõi từ xa mà điểm đến chi nhánh đó không tồn tại lâu hơn trên xa .


Điều này làm việc cho tôi. Tôi cần xóa một nhánh từ xa mà vì một số lý do không thể xóa được bằng nguồn gốc 'git đẩy thông thường: <Branch_name>'
n0denine

Sẽ là chính xác để nói rằng câu trả lời này làm những gì câu trả lời của Jakub Narębski và hơn thế nữa? Đó là, nó cắt tỉa nó tìm nạp các bản cập nhật?
Frank Tan

14

Cũng hữu ích để xem các chi nhánh từ xa mới:

git fetch --all

Điều này đã giúp tôi rất nhiều. Một số lỗi trong Visual studio git ngăn hiển thị các nhánh mới được tạo sau khi nhân bản. Lệnh này giúp hiển thị các nhánh mới
Venkatesh Muniyandi

đẹp
nx

2

Bạn có thể kết hợp các cờ -r-dđể xóa các nhánh từ xa.


mẹo tuyệt vời! tuy nhiên, trong trường hợp này, có một số chi nhánh đã bị xóa, chắc chắn có một lệnh để tìm nạp các cập nhật này
Bain Markev

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.