2013-06-15 46 views
7

Tôi có một kho lưu trữ từ xa và 2 bản nhái.
Tôi tạo một chi nhánh ở một trong các dòng vô tính, ví dụ: test. Tôi làm một số công việc và 2 cam kết. Tôi hợp nhất với chi nhánh masterpush -u chi nhánh.
Tôi thực hiện git pull trong bản sao khác.
Tôi thấy cả hai mastertest.
Trong dự án bản sao đầu tiên tôi làm:
git origin :test để xóa chi tiết test trên kho lưu trữ từ xa.
test bị xóa trên repo từ xa.
Tôi làm git branch -D test và chi nhánh test cũng sẽ bị xóa cục bộ.
Nếu tôi làm git branch -a tôi nhận được:Tại sao tôi thấy một nhánh bị xóa từ xa?

*master 
remotes/origin/master  

Bây giờ trong kho thứ hai tôi làm một git pull.
Khi kéo địa chỉ test dường như bị xóa nhưng git có vẻ như "nghĩ" rằng nhánh từ xa test vẫn tồn tại.
Nếu tôi làm git branch -a tôi nhận được:

* master 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/master 
    remotes/origin/test  

Tại sao xóa test chi nhánh xuất hiện như là một chi nhánh từ xa?

Trả lời

3

Thử sử dụng lệnh này git remote prune origin. Chi nhánh đã xóa sẽ biến mất. Điều này sẽ loại bỏ các tham chiếu cục bộ đến các nhánh từ xa.

+0

Thực ra tôi đã mong 'git' nhắc tôi làm điều này giống như cách nó nhắc thực hiện' git pull'. Tại sao nó không nhắc nhở? Tôi đã nhìn thấy nó nhắc nhưng có lẽ nó đã được trong một trường hợp sử dụng khác nhau? – Cratylus

+0

Vâng, tôi biết ý của bạn là gì. Tôi không thể thực sự nói rằng tôi đã thấy git nhắc bất cứ điều gì về điều đó khi thực hiện một kéo, vì vậy tôi đoán nó là một trường hợp sử dụng khác nhau. Cố gắng đẩy một cái gì đó đến một nhánh bị xóa có lẽ? – crea1

10

Tùy chọn mặc định cho git fetch (và do đó git pull) không cắt các chi nhánh bị xóa từ xa. Tôi không chắc những gì logic đằng sau mặc định này là. Trong mọi trường hợp, tỉa cành từ xa đã xóa, hoặc lấy với

git fetch -p 

hoặc chạy

git remote prune [-n] <name> 

một cách rõ ràng. Với cờ -n, nó sẽ báo cáo những cành cây nào sẽ được cắt tỉa, nhưng không thực sự cắt tỉa chúng. Xem git-fetch(1)git-remote(1) để biết thêm thông tin.

+0

Nhưng nếu kho lưu trữ không phải là của tôi thì làm thế nào tôi biết rằng tôi sẽ cần phải 'prune'? – Cratylus

+1

Bạn có thể chạy 'git remote prune -n ​​' để lấy danh sách, nhưng tôi đã sử dụng để luôn luôn chạy 'git fetch -p' mỗi khi tôi tìm nạp. Tôi đã không nhận ra không có một lựa chọn cho nó trên 'git pull' vì tôi không bao giờ sử dụng' git pull'. –