tìm nạp trong git không nhận được tất cả các chi nhánh


201

Tôi đã nhân bản một kho lưu trữ, sau đó người khác đã tạo một chi nhánh mới mà tôi muốn bắt đầu làm việc. Tôi đọc hướng dẫn, và có vẻ như chết thẳng dễ dàng. Kỳ lạ là nó không hoạt động, và tất cả các bài đăng tôi tìm thấy đề nghị tôi đang làm đúng. Vì vậy, tôi sẽ tự mình chịu đựng sự bực bội, bởi vì phải có điều gì đó rõ ràng sai với điều này:

Hành động đúng dường như

git fetch
git branch -a
* master
  remotes/origin/HEAD --> origin/master
  remotes/origin/master
git checkout -b dev-gml origin/dev-gml

Tại thời điểm này, có một vấn đề, vì một số lý do sau khi git fetchtôi không thể thấy nhánh từ xa dev-gml. Tại sao không? Nếu tôi sao chép kho lưu trữ mới, nó ở đó, vì vậy chắc chắn nhánh từ xa tồn tại:

$ mkdir ../gitest
$ cd ../gitest
$ git clone https://github.com/example/proj.git
Cloning into proj...
remote: Counting objects: 1155, done.
remote: Compressing objects: 100% (383/383), done.
remote: Total 1155 (delta 741), reused 1155 (delta 741)
Receiving objects: 100% (1155/1155), 477.22 KiB | 877 KiB/s, done.
Resolving deltas: 100% (741/741), done.
$ cd projdir
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev-gml
  remotes/origin/master

Tôi đã thử git update, git pull, git fetch --all, git pretty-pleasetrong tất cả các hoán vị có thể ...


44
Làm những gì git config --get remote.origin.fetchsản phẩm? Nếu không +refs/heads/*:refs/remotes/origin/*, có lẽ nó nên như vậy.

yup chính xác là những gì nó tạo ra
Edward Newell

3
Chính xác cùng một vấn đề, nhưng nhận xét trên đã giải quyết nó! Tôi đã +refs/heads/master:refs/remotes/origin/mastermasterthay vì*
Mirko

1
Vấn đề tương tự đối với tôi, nhưng không có gợi ý nào trên trang này giải quyết nó. Kỳ dị.
Magnus

1
@ thoni56: Vâng, điều này có thể là do một bản sao nông.
Trần Việt Hoàng

Câu trả lời:


384

Vấn đề có thể được nhìn thấy khi kiểm tra remote.origin.fetchcài đặt
(Các dòng bắt đầu bằng dấu $nhắc bash với các lệnh tôi đã nhập. Các dòng khác là đầu ra kết quả)

$ git config --get remote.origin.fetch
+refs/heads/master:refs/remotes/origin/master

Như bạn có thể thấy, trong trường hợp của tôi, điều khiển từ xa được đặt để tìm nạp nhánh chính một cách cụ thể và duy nhất. Tôi đã sửa nó theo bên dưới, bao gồm lệnh thứ hai để kiểm tra kết quả.

$ git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*

Ký tự đại diện *tất nhiên có nghĩa là tất cả mọi thứ theo con đường đó.

Thật không may, tôi đã thấy nhận xét này sau khi tôi đã tìm hiểu và tìm thấy câu trả lời bằng cách dùng thử và lỗi.


2
Đây có lẽ nên là câu trả lời được chấp nhận, vì nó thực sự đã giải quyết vấn đề trong bài viết gốc.
LocalPCGuy

1
chỉ là một ghi chú bên lề, tôi đã phải thêm --replace-alltham số để thay thế tất cả các giá trị trên cấu hình cho tôiremote.origin.fetch
Garis M Suero

4
Lưu ý rằng điều này có thể xảy ra nếu bạn đã nhân bản kho lưu trữ của bạn chỉ với một chi nhánh duy nhất, ví dụgit clone <url> --branch <branch> --single-branch [<folder>]
Narretz

2
Kiểm tra câu trả lời của
stux

5
Điều này có thể xảy ra khi bạn nhân bản vớigit clone ... --depth 1
Anatolii Bivol

107

Tôi đã có vấn đề này ngày hôm nay trên một repo.

Đó không phải là +refs/heads/*:refs/remotes/origin/*vấn đề theo giải pháp hàng đầu.

Triệu chứng chỉ đơn giản là git fetch originhoặc git fetchdường như không làm gì cả, mặc dù có những nhánh từ xa để tìm nạp.

Sau khi thử rất nhiều thứ, tôi loại bỏ nguồn gốc từ xa và tạo lại nó. Điều đó dường như đã sửa nó. Không biết tại sao.

xóa bằng: git remote rm origin

và tạo lại với: git remote add origin <git uri>


14
Tôi đã có cấu hình git chính xác cho remote.origin.fetchtức là +refs/heads/*:refs/remotes/origin/*. Các giải pháp trên đã giúp tôi.
Newbee

9
Giải pháp này cũng đúng cho tôi. Điều này thật đáng tiếc vì nó cho thấy có khả năng có lỗi trong Git.
Robert Oschler

2
Điều này cũng giải quyết vấn đề của tôi. Tôi cũng xuất hiện sự cố này trên một máy có phiên bản git 2.19.1v nhưng không gặp sự cố trên máy khác với phiên bản git 2.17.1
jerpint

6
git remote update originđã làm cho tôi. Tôi đoán một cái gì đó cần làm mới?
Felipe Gerard

2
git remote update originkhông làm việc cho tôi nhưng loại bỏ và thêm điều khiển từ xa đã làm.
Anatoliy Kmetyuk

58

Cập nhật từ xa

Bạn cần phải chạy

git remote update

hoặc là

git remote update <remote> 

Sau đó, bạn có thể chạy git branch -rđể liệt kê các chi nhánh từ xa.

Thanh toán chi nhánh mới

Để theo dõi một chi nhánh từ xa (mới) như một chi nhánh địa phương:

git checkout -b <local branch> <remote>/<remote branch>

hoặc (đôi khi nó không hoạt động mà không có thêm remotes/):

git checkout -b <local branch> remotes/<remote>/<remote branch>

Gian lận git hữu ích


5
Nhưng vấn đề của tôi là tôi không thể kiểm tra một chi nhánh từ xa hiện có , bởi vì khách hàng git của tôi không nghĩ rằng nó tồn tại. Xem câu hỏi của tôi. Lưu ý rằng khi tôi chạy git fetchtheo sau git branch -anó không hiển thị tất cả các nhánh. Tôi đã phải xóa thư mục làm việc của mình và sao chép lại để xem chi nhánh dev-gmlmà một cộng tác viên đã thực hiện. Nó đã làm việc lần này, nhưng chúng tôi sẽ phân nhánh thường xuyên!
Edward Newell

Xin chào @EdwardNewell, thnks cho câu trả lời, chỉ để cho bạn biết, liên kết của bạn cheat.errtheblog.com/s/git đã chết đối với tôi ...
Kjellski

Đã lâu rồi kể từ lần đầu tiên tôi hỏi câu hỏi này, và tôi chỉ bị ping vì ai đó đăng lên một lần nữa. Tôi chấp nhận câu trả lời này, mặc dù ban đầu không có gì thực sự hiệu quả với tôi. Lý do cuối cùng tôi đã đánh dấu đúng này là vì tôi nghi ngờ rằng những gì anh ấy viết bên cạnh Edit:rất tốt có thể đã làm việc. Đó là những gì tôi sẽ thử nếu tôi vẫn phải đối mặt với vấn đề. HTH
Edward Newell

Đối với hồ sơ, bit đã giúp tôi ở đây là git remote update origin. Điều đó làm cho các chi nhánh bị mất có thể nhìn thấy thông qua git branch -l -r. (Tôi đã nhìn vào git config --get remote.origin.fetchvà đầu ra +refs/heads/*:refs/remotes/origin/*đúng như mong đợi.)
Robert Dodier

9

viết nó từ thiết bị đầu cuối

git fetch --prune.

nó hoạt động tốt.


1
Cảm ơn bạn! Tôi đã thử nhiều thứ và nghĩ rằng tôi chỉ cần thử một lần ... Bây giờ để tìm kiếm những gì tôi thực sự đã làm ...
MadTurki

Nó làm gì?
Adam Orlov

Nó có tất cả các chi nhánh có sẵn. Nhìn vào cái đầu.
Samet ÖZTOPRAK

4

Để làm cho nó cụ thể hơn Tạo một nhánh theo dõi, có nghĩa là bạn hiện đang theo dõi một nhánh từ xa.

git branch --track branch remote-branch
git branch --track exp remotes/origin/experimental

Sau đó bạn có thể

git branch   # to see the remote tracking branch "exp" created .

Sau đó để làm việc trên chi nhánh đó

git checkout branchname
git checkout exp

Sau khi bạn đã thực hiện thay đổi cho chi nhánh. Bạn có thể git fetch và git merge với nhánh theo dõi từ xa của bạn để hợp nhất các thay đổi của bạn và đẩy sang nhánh từ xa như bên dưới.

git fetch origin
git merge origin/experimental  
git push origin/experimental

Hy vọng nó sẽ giúp và cung cấp cho bạn một ý tưởng, làm thế nào điều này hoạt động.


1

Tôi đã có một vấn đề tương tự, tuy nhiên trong trường hợp của tôi, tôi có thể kéo / đẩy đến chi nhánh từ xa nhưng git statuskhông hiển thị trạng thái chi nhánh địa phương.

Ngoài ra, trong trường hợp của tôi git config --get remote.origin.fetchđã không trả lại bất cứ điều gì

Vấn đề là có một lỗi đánh máy trong .git/configtệp trong dòng tìm nạp của khối từ xa tương ứng. Có thể là một cái gì đó tôi đã thêm do nhầm lẫn trước đây (đôi khi tôi trực tiếp xem tệp này hoặc thậm chí chỉnh sửa nó)

Vì vậy, hãy kiểm tra xem mục từ xa của bạn trong .git/configtệp có đúng không, ví dụ:

[remote "origin"]
    url = https://[server]/[user or organization]/[repo].git
    fetch = +refs/heads/*:refs/remotes/origin/*

0

Điều này có thể là do một khoảnh khắc lòng bàn tay: nếu bạn chuyển đổi giữa một số bản sao, bạn sẽ dễ dàng thấy mình trong cây nguồn sai khi cố gắng kéo một nhánh không tồn tại. Sẽ dễ dàng hơn khi các bản sao có tên tương tự hoặc các bản sao là bản sao riêng biệt cho cùng một dự án từ mỗi người đóng góp. Một bản sao git mới rõ ràng sẽ giải quyết "vấn đề" đó khi vấn đề thực sự là mất tập trung hoặc bối cảnh làm việc hoặc cả hai.


0

Tôi đã phải đi vào Kho lưu trữ từ xa GitExtensions của mình vì dường như không có gì ở đây hoạt động. Ở đó tôi thấy rằng 2 nhánh không có kho lưu trữ từ xa được cấu hình. sau khi điều chỉnh nó trông như saunhập mô tả hình ảnh ở đây

Chi nhánh thông báo noExternal3vẫn hiển thị là không có kho lưu trữ từ xa. Không chắc chắn những gì các lệnh bash sẽ tìm thấy hoặc điều chỉnh đó.


0

Có cùng một vấn đề ngày hôm nay thiết lập repo của tôi từ đầu. Tôi đã thử tất cả mọi thứ, không có gì hoạt động ngoại trừ loại bỏ nguồn gốc và thêm lại nó một lần nữa.

git remote rm origin
git remote add origin git@github.com:web3coach/the-blockchain-bar-newsletter-edition.git

git fetch --all
// Ta daaa all branches fetched

-1

Chúng tôi đã có cùng một vấn đề và bạn phải sử dụng

git fetch

git push origin branch_name

git branch -r

Hy vọng điều này sẽ giúp ai đó đối mặt với cùng một vấ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.