Bagaimana cara mendaftar semua cabang jarak jauh di Git 1.7+?

634

Saya sudah mencoba git branch -r, tetapi itu hanya mencantumkan cabang jarak jauh yang telah saya lacak secara lokal. Bagaimana cara menemukan daftar yang belum saya miliki? (Tidak masalah bagi saya apakah perintah tersebut mencantumkan semua cabang jarak jauh atau hanya cabang yang tidak dilacak.)

James A. Rosen
sumber
11
Anda berarti Anda telah memodifikasi refspec default, sehingga git fetchdan git remote updatetidak mengambil semua cabang remote? Karena kalau tidak, Anda bisa mengambil kemudian menggunakan git branch -r...
Cascabel
2
Aku harus punya. git branch -rhanya menunjukkan kepada saya cabang-cabang terpencil yang telah saya lacak secara lokal. Ini bekerja lebih baik sekarang.
James A. Rosen

Jawaban:

804

Untuk sebagian besar [1] pengunjung di sini, jawaban yang benar dan paling sederhana untuk pertanyaan "Bagaimana cara mendaftar semua cabang terpencil di Git 1.7+?" adalah:

git branch -r

Untuk minoritas kecil [1] git branch -r tidak berfungsi. Jika git branch -rtidak berhasil coba:

git ls-remote --heads <remote-name>

Jika git branch -rtidak berfungsi, maka mungkin seperti yang dikatakan Cascabel "Anda telah memodifikasi refspec default, sehingga git fetchdan git remote updatejangan mengambil semua remotecabang" .


[1] Pada saat penulisan catatan kaki 2018-Februari ini, saya melihat komentar dan melihat bahwa git branch -rkarya - karya untuk sebagian besar (sekitar 90% atau 125 dari 140 ).

Jika git branch -rtidak berfungsi, centang git config --get remote.origin.fetchberisi wildcard ( *) sesuai jawaban ini

Dustin
sumber
15
Anda juga dapat melakukannya git ls-remote [url]sehingga Anda tidak perlu mengkloningnya terlebih dahulu :)
Zsub
142
Jawaban ini benar tetapi menyesatkan, hal pertama yang harus dilihat pengguna dari mesin pencari adalah: git branch -rkarena itu adalah jawaban yang benar dan paling sederhana, penanya memiliki kasus khusus di mana ia memodifikasi perilaku miliknya git branch -rsehingga sebagian besar pengguna yang datang ke sini tidak akan have
Stephan
24
@Stephan: Anda yakin tentang ini? git branch -rjuga tidak bekerja untuk saya. Itu hanya daftar cabang yang sudah dilacak secara lokal. Tetapi git ls-remote --headsterdaftar semua cabang yang tersedia di repositori jarak jauh ...
rexford
2
Jika seseorang ingin mengambil dari cabang yang terdaftar melalui git ls-remote(dan tidak terdaftar di git branch -r), seseorang harus mengeksekusi git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"sebelum mengambil seperti yang dijelaskan di stackoverflow.com/a/26649770/873282 .
koppor
11
Jangan lupa lakukan git fetch --allsebelumnya untuk mendapatkan semua cabang jarak jauh saat ini.
A. Attia
173

remote show menunjukkan semua cabang di remote, termasuk yang tidak dilacak secara lokal dan bahkan yang belum diambil.

git remote show <remote-name>

Itu juga mencoba untuk menunjukkan status cabang relatif terhadap repositori lokal Anda:

> git remote show origin
* remote origin
  Fetch URL: C:/git/.\remote_repo.git
  Push  URL: C:/git/.\remote_repo.git
  HEAD branch: master
  Remote branches:
    branch_that_is_not_even_fetched new (next fetch will store in remotes/origin)
    branch_that_is_not_tracked      tracked
    branch_that_is_tracked          tracked
    master                          tracked
  Local branches configured for 'git pull':
    branch_that_is_tracked merges with remote branch_that_is_tracked
    master                 merges with remote master
  Local refs configured for 'git push':
    branch_that_is_tracked pushes to branch_that_is_tracked (fast-forwardable)
    master                 pushes to master                 (up to date)
Klas Mellbourn
sumber
Persis. Tidak diambil, tidak dilacak secara lokal.
Thufir
3
branch_that_is_not_tracked tracked?
Piotr Dobrogost
3
@PiotrDobrogost Ya! branch_that_is_not_trackedadalah cabang yang tidak dilacak oleh cabang git lokal mana pun. Namun, telah diambil ke repositori lokal (jadi ada cabang jarak jauh). Untuk beberapa alasan aneh git remote showmenyebut keadaan ini tracked, meskipun tidak ada cabang lokal yang melacak remote. Dalam hal ini, kebalikannya trackedadalah new, yang berarti "tidak diambil".
Klas Mellbourn
ini tidak berfungsi secara pemrograman, terlalu sulit untuk diurai
Alexander Mills
Ini menangkap kasus khusus yang saya miliki di mana saya menarik cabang terpencil secara lokal yang kemudian dipindahkan pada remote. Kemudian git branch -rmenyarankan bahwa masih ada cabang yang jauh, tetapi git remote show originmenunjukkan itu refs/remotes/origin/my-now-dead-branch stale (use 'git remote prune' to remove). Jauh lebih bermanfaat!
icc97
54
git branch -a | grep remotes/*
Idan K
sumber
10
Ini pada dasarnya setara dengan git branch -r, yang menurut OP tidak cukup baik.
Cascabel
9
sebenarnya keduanya git branch -adan git branch -rdaftar semua cabang jauh untuk saya, saya tidak yakin apakah apa yang dikatakan OP itu benar. Saya baru saja menyiapkan repositori tes dan memverifikasi ini (hanya memiliki asal pelacakan master / master tetapi masih melihat semua cabang jarak jauh dengan kedua bendera).
Idan K
2
tampaknya ini tidak mencantumkan semua cabang jarak jauh jika saya mengkloning dari repo yang sudah ada dan kemudian secara manual menunjuk asal pada server git. Jawaban yang diterima menangani kasus ini.
nielsbot
Solusi ini tampaknya tidak mencantumkan cabang jarak jauh yang dibuat sejak saya terakhir kali mengambil.
Anubian Noob
Yang aneh: Selama bertahun-tahun saya telah menggunakan git fetchdiikuti oleh git branch -a, yang baru saja mulai gagal untuk saya. Mungkin perilaku git diubah?
Sebastian Mach
39

Menggunakan git branch -rdaftar semua cabang jarak jauh dan git branch -adaftar semua cabang di lokal dan jarak jauh. Daftar ini sudah ketinggalan zaman. Agar daftar ini tetap terbaru, jalankan

git remote update --prune

yang akan memperbarui daftar cabang lokal Anda dengan semua yang baru dari jarak jauh dan menghapus yang tidak ada lagi. Menjalankan perintah pembaruan ini tanpa --prune akan mengambil cabang baru tetapi tidak menghapus yang tidak lagi pada remote.

Anda dapat mempercepat pembaruan ini dengan menentukan remote, jika tidak maka akan menarik pembaruan dari semua remote yang telah Anda tambahkan, seperti itu

git remote update --prune origin
Nick Gronow
sumber
Ini memperbaiki masalah saya - 'git branch -r' sekarang berfungsi untuk saya.
Francis Norton
27

Tapi

git branch -ar

harus melakukannya.

Seakayone
sumber
41
Melewati di kedua argumen itu berlebihan. -rmengembalikan hanya cabang jarak jauh. -amengembalikan cabang lokal dan remote. Dengan demikian, git branch -adan git branch -arkeduanya menghasilkan output yang sama.
Walter Roman
19

Anda juga dapat melakukan git fetchdiikuti oleh a git branch -r. Tanpa mengambil Anda tidak akan melihat cabang-cabang terbaru.

Max Sohrt
sumber
git fetch --alluntuk memiliki semua cabang saat ini
A. Attia
19

Git Branching - Cabang Terpencil

git ls-remote

Dokumentasi git .

Michael Horojanski
sumber
git ls-remote --head untuk mendapatkan hasil yang lebih spesifik
Wolfgang Fahl
1
Ini adalah satu-satunya perintah yang juga mencantumkan cabang saya tanpa sengaja saya mendorong heads/masuk refs/heads/features/my-branch, terima kasih!
msa
9

Cara paling sederhana yang saya temukan:

git branch -a
Damián Rafael Lattenero
sumber
9

TL; TR;

Ini adalah solusi dari masalah Anda:

git remote update --prune    # To update all remotes
git branch -r                # To display remote branches

atau:

git remote update --prune    # To update all remotes
git branch <TAB>             # To display all branches
simhumileco
sumber
5

Perintah terbaik untuk dijalankan adalah git remote show [remote]. Ini akan menampilkan semua cabang, jarak jauh dan lokal, dilacak dan tidak terlacak.

Berikut ini contoh dari proyek sumber terbuka:

> git remote show origin
* remote origin
  Fetch URL: https://github.com/OneBusAway/onebusaway-android
  Push  URL: https://github.com/OneBusAway/onebusaway-android
  HEAD branch: master
  Remote branches:
    amazon-rc2                   new (next fetch will store in remotes/origin)
    amazon-rc3                   new (next fetch will store in remotes/origin)
    arrivalStyleBDefault         new (next fetch will store in remotes/origin)
    develop                      tracked
    master                       tracked
    refs/remotes/origin/branding stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    develop merges with remote develop
    master  merges with remote master
  Local refs configured for 'git push':
    develop pushes to develop (local out of date)
    master  pushes to master  (up to date)

Jika kita hanya ingin mendapatkan cabang jarak jauh, kita bisa menggunakan grep. Perintah yang ingin kita gunakan adalah:

grep "\w*\s*(new|tracked)" -E

Dengan perintah ini:

> git remote show origin | grep "\w*\s*(new|tracked)" -E
    amazon-rc2                   new (next fetch will store in remotes/origin)
    amazon-rc3                   new (next fetch will store in remotes/origin)
    arrivalStyleBDefault         new (next fetch will store in remotes/origin)
    develop                      tracked
    master                       tracked

Anda juga dapat membuat alias untuk ini:

git config --global alias.branches "!git remote show origin | grep \w*\s*(new|tracked) -E"

Maka Anda bisa lari git branches.

Anubian Noob
sumber
5

Dengan Git Bash , Anda dapat menggunakan:

git branch -a
Issam Ressani
sumber
5

Coba ini...

git fetch origin
git branch -a
Ashish Mehta
sumber
4

Jalankan saja sebuah git fetchperintah. Ini akan menarik semua cabang jarak jauh ke repositori lokal Anda, dan kemudian lakukan git branch -auntuk mendaftar semua cabang.

Manjunatha B
sumber
1

Jika ada cabang jarak jauh yang Anda tahu harus terdaftar, tetapi tidak terdaftar, Anda mungkin ingin memverifikasi bahwa asal Anda diatur dengan benar dengan ini:

git remote show origin

Jika itu semua baik, mungkin Anda harus menjalankan pembaruan:

git remote update

Dengan asumsi bahwa berjalan dengan sukses, Anda harus dapat melakukan apa yang jawaban lain katakan:

git branch -r
ArtOfWarfare
sumber
1

Menggunakan perintah ini,

git log -r --oneline --no-merges --simplify-by-decoration --pretty=format:"%n %Cred CommitID %Creset: %h %n %Cred Remote Branch %Creset :%d %n %Cred Commit Message %Creset: %s %n"

CommitID       : 27385d919
Remote Branch  : (origin/ALPHA)
Commit Message :  New branch created

Ini mencantumkan semua cabang jarak jauh termasuk pesan komit dan ID komit yang dirujuk oleh cabang jarak jauh.

Nayagam
sumber
1

Saya akan menggunakan:

git branch -av

Perintah ini tidak hanya menampilkan daftar semua cabang, termasuk cabang jarak jauh yang dimulai dengan /remote, tetapi juga memberikan Anda *umpan balik tentang apa yang Anda perbarui dan komit terakhir.

prosti
sumber
0

Pastikan asal jauh yang Anda daftarkan benar-benar repositori yang Anda inginkan dan bukan klon yang lebih lama.

pengguna3737174
sumber
0

Saya akhirnya melakukan pipa shell untuk mendapatkan apa yang saya inginkan. Saya baru saja menggabungkan cabang dari remote asal:

git branch -r --all --merged \
    | tail -n +2 \
    | grep -P '^  remotes/origin/(?!HEAD)' \
    | perl -p -e 's/^  remotes\/origin\///g;s/master\n//g'
ThorSummoner
sumber
0

Jawaban yang diterima bekerja untuk saya. Tapi saya merasa lebih bermanfaat untuk memiliki komit diurutkan mulai dari yang terbaru.

git branch -r --sort=-committerdate

https://git-scm.com/docs/git-branch

Gabriel Gates
sumber