2012-10-06 39 views
47

Một đồng nghiệp đẩy một chi nhánh từ xa mới tới nguồn gốc/dev/trang chủ và tôi không thể nhìn thấy nó khi tôi chạy:Git: Không thể nhìn thấy mới chi nhánh từ xa

$ git branch -r 

tôi vẫn nhìn thấy từ trước chi nhánh từ xa.

Tôi cho rằng điều này là vì các từ xa cục bộ của tôi không cập nhật vì vậy khi tôi chạy lệnh git pull không có gì xảy ra vì git pull chỉ kéo nhánh hiện tại đúng? Không giống như git push, đẩy tất cả các nhánh có thay đổi đến nhánh từ xa tương ứng?

Trả lời

79

Trước tiên, hãy kiểm tra kỹ xem chi nhánh đã thực sự được đẩy từ xa hay chưa bằng cách sử dụng lệnh git ls-remote origin. Nếu nhánh mới xuất hiện trong đầu ra, hãy thử và đưa ra lệnh git fetch: nó sẽ tải xuống các tham chiếu nhánh từ kho lưu trữ từ xa.

Nếu nhánh từ xa của bạn vẫn không xuất hiện, hãy kiểm tra kỹ (trong đầu ra ls-remote) tên chi nhánh trên điều khiển từ xa và cụ thể là gì nếu nó bắt đầu bằng refs/heads/. Đây là bởi vì, theo mặc định, giá trị của remote.<name>.fetch là:

+refs/heads/*:refs/remotes/origin/* 

để chỉ những tài liệu tham khảo từ xa có tên bắt đầu với refs/heads/ sẽ được ánh xạ tại địa phương như tài liệu tham khảo từ xa theo dõi dưới refs/remotes/origin/ (tức là, họ sẽ trở thành remote- chi nhánh theo dõi)

+1

Tôi đã có thể nhìn thấy nhánh từ xa mới sau khi thực hiện tìm nạp gốc git, nhưng không chắc chắn sự khác biệt là gì nếu tôi chỉ tìm kiếm git? Tôi đọc về git remote update, nhưng không rõ chuyện đó sẽ làm gì. Tôi có cần chạy git fetch cho bất kỳ nhánh từ xa mới nào từ đây không? – hybrid9

+0

@ hybrid9 Nếu bạn sử dụng 'git fetch', git sẽ tải xuống các tham chiếu từ kho lưu trữ từ xa mặc định đã được chỉ định trong' .git/config': thường nó sẽ được gọi là 'origin', vì vậy cả hai lệnh đều tương đương, nhưng cấu hình cụ thể có thể khác nhau vì một số lý do. Không, bạn không cần phải cung cấp 'git fetch' cho mỗi nhánh, vì (theo mặc định) nó nạp ** tất cả các nhánh **. –

+0

Git của tôi là mặc định không có thay đổi đối với cấu hình của tôi. Xin lỗi, tôi có nghĩa là nếu một chi nhánh từ xa mới được thêm vào bởi một người mà tôi cần phải làm việc, tôi sẽ cần phải chạy git fetch origin một lần nữa trước khi tôi có thể theo dõi nó? Tôi lo lắng về những gì git fetch sẽ làm cho các ngành khác được theo dõi từ xa của tôi như phát triển và làm chủ khi tôi vẫn đang làm việc trong họ. Đoán tôi nên kéo vào những người trước khi tôi lấy? – hybrid9

19

Thực hiện git cập nhật từ xa cũng sẽ cập nhật danh sách các nhánh có sẵn từ kho lưu trữ từ xa.

Nếu bạn đang sử dụng TortoiseGit, kể từ phiên bản 1.8.3.0, bạn có thể thực hiện "Git -> Sync" và sẽ có nút "Cập nhật từ xa" ở phía dưới bên trái của cửa sổ xuất hiện. Nhấp vào đó. Sau đó, bạn sẽ có thể thực hiện "Git -> Switch/Checkout" và có nhánh mới từ xa xuất hiện trong danh sách các nhánh bạn có thể chọn.

+11

'git remote update' là một cách cũ để làm điều này, lệnh ưa thích mới hơn là 'git fetch'. –

1

gì đã kết thúc cuối cùng làm việc đối với tôi là để thêm tên kho từ xa để lệnh git fetch, như thế này:

git fetch core 

Bây giờ bạn có thể xem tất cả trong số họ như thế này:

git branch --all 
9

Kiểm tra xem .git/config có chứa

[remote "origin"] 
    url = … 
    fetch = +refs/heads/master:refs/remotes/origin/master 

Nếu có, cha nge nó nói

[remote "origin"] 
    url = … 
    fetch = +refs/heads/*:refs/remotes/origin/* 

Sau đó, bạn sẽ có thể sử dụng nó:

$ git fetch 
remote: Counting objects: … 
remote: Compressing objects: .. 
Unpacking objects: … 
remote: … 
From … 
* [new branch]   branchname -> origin/branchname 
$ git checkout branchname 
Branch branchname set up to track remote branch branchname from origin. 
Switched to a new branch 'branchname' 
0

Nghe có vẻ tầm thường, nhưng vấn đề của tôi là tôi đã không có trong dự án đúng. Hãy chắc chắn rằng bạn đang ở trong dự án bạn mong muốn được ở; nếu không, bạn sẽ không thể kéo các nhánh chính xác xuống được.

Các vấn đề liên quan