Chi nhánh từ xa không hiển thị trong chi nhánh git -r


138

Tôi đã được đẩy đến một kho lưu trữ Bitbucket từ xa và gần đây một đồng nghiệp đã đẩy một chi nhánh mới mà anh ta tạo ra vào cùng một kho lưu trữ.

Tôi đang cố gắng tìm nạp những thay đổi mà anh ấy đã tải lên.

 $ git branch -a
 * master
 localbranch1
 localbranch2
 remotes/origin/master

$ git chi nhánh -r nguồn gốc / chủ

Trong giao diện người dùng web cho Bitbucket tôi có thể thấy chi nhánh mà anh ta đã thực hiện. Tôi có thể làm cái này như thế nào?

Thử tiếp theo:

$ git fetch bitbucket
Password for 'https://xxxxx@bitbucket.org':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

Nếu nhánh mà anh ta tạo được gọi là new_branch_b thì tôi có nên chờ xem sau không?

$ git branch -r
origin/master
origin/new_branch_b

Lần thử thứ ba:

$ git remote update
Fetching bitbucket
Password for 'https://xxxxx@bitbucket.org':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

$ git branch -r
  origin/master

Lần thử thứ tư:

[remote "bitbucket"]
url = https://user@bitbucket.org/user/repo.git

Tôi đã gọi điều khiển từ xa bitbucketchứ không phải nguồn gốc (ít nhất đó là những gì tôi nhớ lại; tôi đã thiết lập nó một lúc trước)

Lần thử thứ năm:

Tôi đã cập nhật cấu hình từ xa Bitbucket theo câu trả lời của kan :

$ git config -e

[remote "bitbucket"]
    url = https://user@bitbucket.org/user/repo.git
    fetch = +refs/heads/*:refs/remotes/bitbucket/*

Đối với hầu hết mọi người, nó sẽ được gọi là nguồn gốc:

[remote "origin"]
    url = https://user@bitbucket.org/user/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

Sau đó,

$ git remote update

Fetching bitbucket
Password for 'https://user@bitbucket.org':
remote: Counting objects: 48, done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 35 (delta 21), reused 0 (delta 0)
Unpacking objects: 100% (35/35), done.
From https://bitbucket.org/user/repo
 * [new branch]      branch_name1 -> origin/branch_name1
 * [new branch]      branch_name2    -> origin/branch_name2

.... và như thế.

Tôi nghĩ git fetch origincũng sẽ làm việc cho git remote update.


1
Thật tuyệt, nhưng có lẽ nó có ý nghĩa hơn để sử dụng refs/remotes/bitbucket/*thay vì refs/remotes/origin/*.
kan

Cảm ơn, lưu ý hợp lệ về tính nhất quán đặt tên. Có lẽ có ý nghĩa hơn để thay đổi bitbucket thành nguồn gốc mặc dù! Hội nghị và tất cả những thứ đó :)
sợ hãi

1
git fetch originthực hiện công việc
Món ăn

Câu trả lời:


107

Phần remotenày cũng chỉ định quy tắc tìm nạp. Bạn có thể thêm một cái gì đó như thế này vào nó để lấy tất cả các nhánh từ xa:

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

(Hoặc thay thế originbằng bitbucket.)

Vui lòng đọc về nó ở đây: 10,5 Git Internals - The Refspec


3
Điều này đã khắc phục sự cố phân nhánh liên tục của tôi trong Git mà tôi đã có trong nhiều tuần. Đột nhiên tất cả các công cụ cập nhật từ xa git thực sự bắt đầu làm việc. Cảm ơn!
PålOliver

2
Vì một số lý do, nó trông giống như: fetch = +refs/heads/master:refs/remotes/origin/masterđối với tôi. Thay thế masterbằng cách *khắc phục vấn đề của tôi.
Sebastian Blask

2
Điều này rất hữu ích nếu bạn đã chuyển đổi một bản sao nông thành không rõ ràng.
Warpzit

@kan Bạn có biết tại sao điều này đôi khi xảy ra không? Nó chỉ xảy ra với tôi khi git clonemột dự án. Tôi không nhớ đã làm bất cứ điều gì đặc biệt với git địa phương của tôi.
dotnetCarpenter

@dotnetCarpenter Không chắc chắn ... không bao giờ xảy ra với tôi bất ngờ. Có thể cloneđã bị gián đoạn và sau đó tiếp tục? Hoặc một cái gì đó khác đã gia nhập repo đồng thời?
kan

217

Cập nhật điều khiển từ xa nếu bạn vẫn chưa thực hiện:

$ git remote update
$ git branch -r

1
Tôi đang sử dụng ứng dụng khách GitHub trên Win và đôi khi nó không cập nhật các nhánh từ xa. Dòng đầu tiên "git remote update" hoạt động như một nét duyên dáng. Dễ dàng và sạch sẽ
Stefano Buora

sau khi git remote updatetôi có thể thấy chi nhánh mới trong UI. Cảm ơn
Tinkaal Gogoi

Nó không giúp được gì.
dKab 20/03/2017

Tôi nghĩ rằng tôi đã tải thành công chi nhánh nhưng chỉ cần xem nó được liệt kê với git branch -r. Trên git-scm.com/docs/git-branch có ghi "Tùy chọn -r khiến các nhánh theo dõi từ xa được liệt kê và tùy chọn -a hiển thị cả nhánh cục bộ và nhánh từ xa". git remote updatelấy tất cả các nhánh của tất cả các điều khiển từ xa được liệt kê trong git remote -v.
Rock Lee

Sau khi chạy nó, tôi đã có thể chạy git checkout origin/mastervà sau đó tách ra khỏi cái đầu tách ra đến nhánh chính của mìnhgit branch master; git checkout master
Dfranc3373

34

Nếu bạn sao chép với --depththam số, nó đặt .git/configkhông tìm nạp tất cả các nhánh, mà chỉ chủ.

Bạn chỉ có thể bỏ qua tham số hoặc cập nhật tệp cấu hình từ

fetch = +refs/heads/master:refs/remotes/origin/master

đến

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

1
Cảm ơn! Câu trả lời của bạn thực sự khắc phục vấn đề một cách dễ dàng và có vẻ như là cách chính xác để làm điều đó. Nhưng bạn nên thêm rằng tập tin cấu hình nằm trong .git/config, để mọi người có thể tìm thấy nó.
dotnetCarpenter

19

Tôi gặp vấn đề tương tự. Có vẻ như giải pháp đơn giản nhất là chỉ cần loại bỏ điều khiển từ xa, lắp lại và tìm nạp.


1
Đã dành rất nhiều thời gian để tìm câu trả lời này. Điều này làm việc mà không có bất kỳ vấn đề. Cảm ơn. :)
kisanme

1
Làm việc cho tôi cũng vậy, khá kỳ lạ là điều này đã giải quyết nó
CailinP

1
git remote -vsẽ hiển thị cho bạn từ xa của bạn để bạn có thể giữ url, git remote rm originsẽ xóa nó, git remote add origin <url>sẽ thêm lại nó.
Siddhartha

Điều này làm việc cho tôi. Tôi đã có một mô hình con git mà bằng cách nào đó, không lấy bất kỳ nhánh từ xa nào hơn chủ. Loại bỏ và thêm nó một lần nữa giải quyết nó.
Zamrony P. Juhara

làm việc cho tôi, nhưng bây giờ tôi nhận được một cảnh báowarning: ignoring broken ref refs/remotes/origin/HEAD
dafnahaktana

7

Thật không may, git branch -agit branch -rlàm không hiển thị cho bạn tất cả các chi nhánh từ xa, nếu bạn chưa thực hiện một "git fetch".

git remote show originlàm việc ổn định mọi lúc Cũng git show-refhiển thị tất cả các tài liệu tham khảo trong kho Git. Tuy nhiên, nó hoạt động giống như git branchlệnh.

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.