Git: Không thể xem chi nhánh từ xa mới


115

Một đồng nghiệp đã đẩy một nhánh từ xa mới đến origin / dev / Home và tôi không thể nhìn thấy nó khi tôi chạy:

$ git branch -r

Tôi vẫn thấy các chi nhánh từ xa đã có từ trước.

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



1
quản lý để quên git pull, cảm ơn
JelenaČuklina

1
Trong trường hợp của tôi git fetch <name-of-remote>đã thực hiện thủ thuật. Nếu không có tên của điều khiển từ xa, nó KHÔNG hoạt động.
Menno Deij - van Rijswijk

Câu trả lời:


163

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

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

để chỉ các tham chiếu từ xa có tên bắt đầu bằng refs/heads/sẽ được ánh xạ cục bộ dưới dạng các tham chiếu theo dõi từ xa bên dưới refs/remotes/origin/(nghĩa là chúng sẽ trở thành các nhánh theo dõi từ xa)


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

1
@ 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 thì nó sẽ được gọi origin, vì vậy cả hai lệnh đều tương đương nhau, nhưng cấu hình cụ thể của bạn 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 fetchcho mọi nhánh vì (theo mặc định) nó lấy tất cả các nhánh.
Marco Leogrande

1
@ hybrid9 git pulltương đương với git fetch+ git merge(hoặc git rebasenếu bạn đã thay đổi mặc định), vì vậy bạn có thể tiếp tục sử dụng git pullnhư bình thường và các nhánh từ xa mới sẽ tự bật lên.
Marco Leogrande

1
Tôi ban đầu chạy git pull nhưng tôi chưa bao giờ nhìn thấy nhánh từ xa mới đó khiến tôi thực sự bối rối. Chỉ cho đến khi tôi chạy nguồn gốc tìm nạp git. Tôi đánh giá cao thời gian trả lời các câu hỏi của tôi.
hybrid 9

2
@hybrid Tôi có cùng một vấn đề. git ls-remote gerritrepo:projectchương trình chi nhánh từ xa mới nhưng git branch -akhông ... tôi phải làm bản sao khác và chỉ sau đó chi nhánh mới sẽ xuất hiện
Vikram

78

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

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

Nếu vậy, hãy thay đổi 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'

12
Điều này xảy ra với tôi sau một lần nhân bản nông cạn ban đầu.
ArkTekniK

Hoàn hảo!!! Cảm ơn rất nhiều! Điều đó đã xảy ra với tôi khi cài đặt một vòi Homebrew tùy chỉnh bằng lệnh brew tap user/repo: bản sao cục bộ của repo được nhân bản brewcó các cài đặt bạn đã đề cập và không thể xem và sử dụng các nhánh khác mà tôi có trong repo của mình. Cảm ơn một lần nữa! :) +1!
rmbianchi

3
Lệnh sau có thể được sử dụng thay vì chỉnh sửa thủ công tệp .git / config . git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"và sau đó git fetch originđể lấy tất cả các nhánh về nguồn gốc .
dotnetCarpenter

cái này là một cái tốt!
madz

47

Câu trả lời đơn giản nhất là:

git fetch origin <branch_name>


2
Đây thực sự là điều DUY NHẤT hiệu quả với tôi.
Theodore R. Smith

3
Nó không hiệu quả với tôi. Tôi gặp lỗi này:fatal: Couldn't find remote ref <branch_name>
Parisa Khateri 18/09/18

3
vâng nó cũng hoạt động tốt cho tôi, sau khi thanh toán git này hoạt động tốt !!
whoami

30

Thực hiện cập nhật từ xa git 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à chi nhánh từ xa mới xuất hiện trong menu thả xuống của các chi nhánh bạn có thể chọn.


18
git remote updatelà một cách cũ để thực hiện việc này, lệnh mới hơn được ưu tiên hơn git fetch.

Trong phiên bản TortoiseGit (2.8.0.0) của tôi, nút ở phía dưới bên trái có nhiều tùy chọn dưới mũi tên và nó ghi nhớ những gì bạn đã chọn trước đó. Điều này có nghĩa là nút có thể không thông báo "Cập nhật từ xa". Nếu bạn chưa sử dụng nó trước đây, nó sẽ báo "Kéo". Vì vậy, hãy nhấp vào mũi tên và bạn sẽ thấy "Cập nhật từ xa" trong danh sách các tùy chọn.
Michael Hinds vào

13

Giả sử chúng tôi đang tìm kiếm bản phát hành / 1.0.5

Khi git fetch -allđược không làm việc và rằng bạn không thể nhìn thấy chi nhánh ở xa và git branch -rkhông hiển thị chi nhánh cụ thể này.

1. In tất cả các tham chiếu từ xa (chi nhánh, thẻ, ...):

git ls-remote origin Sẽ hiển thị cho bạn chi nhánh từ xa mà bạn đang tìm kiếm.

e51c80fc0e03abeb2379327d85ceca3ca7bc3ee5        refs/heads/fix/PROJECT-352
179b545ac9dab49f85cecb5aca0d85cec8fb152d        refs/heads/fix/PROJECT-5
e850a29846ee1ecc9561f7717205c5f2d78a992b        refs/heads/master
ab4539faa42777bf98fb8785cec654f46f858d2a        refs/heads/release/1.0.5
dee135fb65685cec287c99b9d195d92441a60c2d        refs/heads/release/1.0.4
36e385cec9b639560d1d8b093034ed16a402c855        refs/heads/release/1.0
d80c1a52012985cec2f191a660341d8b7dd91deb        refs/tags/v1.0

Nhánh mới 'release / 1.0.5' xuất hiện trong đầu ra.

2. Buộc tìm nạp một nhánh từ xa:

git fetch origin <name_branch>:<name_branch>

$ git fetch origin release/1.0.5:release/1.0.5

remote: Enumerating objects: 385, done.
remote: Counting objects: 100% (313/313), done.
remote: Compressing objects: 100% (160/160), done.

Receiving objects: 100% (231/231), 21.02 KiB | 1.05 MiB/s, done.
Resolving deltas: 100% (98/98), completed with 42 local objects.
From http://git.repo:8080/projects/projectX
 * [new branch]        release/1.0.5 -> release/1.0.5

Bây giờ bạn cũng có các giới thiệu cục bộ, bạn kiểm tra (hoặc bất cứ điều gì) chi nhánh này.

Công việc hoàn thành!


1
Bạn là một người tiết kiệm cuộc sống :)
Chakri

# 2 là những gì tôi đang tìm kiếm. Cảm ơn!
Matthew

4

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


Rất tiếc! Tốt!
Marc

2

Tôi đã sử dụng vũ lực và gỡ bỏ điều khiển từ xa rồi thêm vào

git remote rm <remote>
git remote add <url or ssh>

1

Cuối cùng, những gì cuối cùng làm việc cho tôi là thêm tên kho lưu trữ từ xa vào git fetchlệnh, như sau:

git fetch core

Bây giờ bạn có thể thấy tất cả chúng như thế này:

git branch --all

0

Bạn có thể thanh toán từ xa branch / n git fetch && git checkout remotebranch

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.