Pertanyaan Bagaimana cara mengetahui cabang lokal mana yang melacak cabang jarak jauh mana di Git?


Saya ingin tahu apakah ada cara untuk mengetahui cabang lokal mana yang melacak cabang jarak jauh mana di Git.

Saya menggunakan satu server jauh, yang dinamai "asal".


231
2017-08-27 01:04




Koreksi saya jika saya salah namun tidak 'itu cabang terpencil yang diberi nama asal secara default daripada server ?? - Chris Halcrow


Jawaban:


Menggunakan contoh salinan Wayang saya yang diperiksa dari repositori Git hulu di Github.com ...

$ git remote show origin
* remote origin
  Fetch URL: git://github.com/reductivelabs/puppet.git
  Push  URL: git://github.com/reductivelabs/puppet.git
  HEAD branch: master
  Remote branches:
    0.24.x                 tracked
    0.25.x                 tracked
    2.6.x                  tracked
    master                 tracked
    next                   tracked
    primordial-ooze        tracked
    reins-on-a-horse       tracked
    testing                tracked
    testing-17-march       tracked
    testing-18-march       tracked
    testing-2-april        tracked
    testing-2-april-midday tracked
    testing-20-march       tracked
    testing-21-march       tracked
    testing-24-march       tracked
    testing-26-march       tracked
    testing-29-march       tracked
    testing-31-march       tracked
    testing-5-april        tracked
    testing-9-april        tracked
    testing4268            tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

Kemudian jika saya melakukan hal berikut:

$ git checkout -b local_2.6 -t origin/2.6.x 
Branch local_2.6 set up to track remote branch 2.6.x from origin.
Switched to a new branch 'local_2.6'

Dan akhirnya menjalankan kembali git remote show origin perintah lagi saya akan melihat bawah berikut dekat bagian bawah:

  Local branches configured for 'git pull':
    local_2.6 merges with remote 2.6.x
    master    merges with remote master

197
2017-08-27 03:03



Jadi ini berarti Anda dapat melacak semua cabang terpencil di wayang meskipun Anda memiliki beberapa cabang lokal. Apa arti banyak "dilacak" berarti Anda melihat hasil dari perintah? "dilacak" oleh cabang lokal mana? - PJ.
Cabang-cabang terpencil dilacak bahwa jika Anda melakukan git fetch atau git pull pembaruan ke cabang-cabang terpencil akan dilacak di repositori kloning Anda. Cabang lokal hanya itu, cabang lokal dari cabang-cabang terpencil dan dengan demikian pembaruan ke cabang-cabang terpencil akan dilacak dan digabungkan ketika perintah yang tepat untuk melakukannya diberikan. Saya secara eksplisit memasukkan opsi '-t' ketika membuat cabang lokal untuk memastikannya melacak cabang dari mana asalnya. Ingat cabang lokal juga dapat melacak cabang lokal lain sehingga tidak harus menjadi cabang jarak jauh. - Jeremy Bouse
@PJ: Istilah "track" memiliki dua makna berbeda di Git. Garis "dilacak" masuk git remote show remote-name mengacu pada "Melacak cabang" (snapshot cabang dari repositori jarak jauh). Garis "menyatu dengan" mengacu pada cabang lokal yang memiliki “Cabang hulu” konfigurasi (dibuat dengan dengan --track/-t opsi dari cabang git atau checkout git dan dengan demikian sering bingung dengan "cabang pelacakan"). - Chris Johnsen
"cabang pelacakan jarak jauh"adalah entri glosarium terbaru untuk" cabang pelacakan "yang disebutkan di atas. Dokumen telah diperbarui 8b3f3f84. - ento


Untuk semua cabang:

git branch -avv

Hanya untuk cabang lokal:

git branch -lvv

Hanya untuk cabang jarak jauh:

git branch -rvv

menunjukkan semua cabang serta nama cabang hulu.


122
2018-02-14 16:02



Ini adalah jawaban yang paling sederhana dan paling lengkap!
Pada git versi 1.7.7.5 ini menunjukkan kepada saya cabang lokal dan sha-1 yang ditunjuknya, tetapi tidak menunjukkan cabang jarak jauh yang dilacak ... - mpontillo
Bekerja untuk saya di git versi 1.7.4.1 Yang kedua 'v' diperlukan untuk menunjukkan cabang pelacakan jarak jauh. - Peter Johnson
untuk mengurangi output git branch -lvv tunjukan hanya cabang lokal dengan hulu mungkin berguna - A B
^git branch -vv bekerja untukku ... - notacouch


Jeremy Bouse mengilustrasikan bagaimana git remote show menampilkan informasi pelacakan. Itu harus cukup jika Anda hanya ingin informasi untuk konsumsi manusia.

Jika Anda berencana menggunakan informasi dalam konteks otomatis (misalnya skrip), Anda harus menggunakan tingkat bawah ("pipa") git for-each-ref sebagai gantinya.

% git remote show origin
* remote origin
⋮
  Local branches configured for 'git pull':
    master merges with remote master
    pu     merges with remote pu
⋮
% git for-each-ref --format='%(refname:short) <- %(upstream:short)' refs/heads
master <- origin/master
pu <- origin/pu

Itu git for-each-ref belajar %(upstream) token in Git 1.6.3. Dengan versi Git yang lebih lama, Anda harus mengekstrak informasi pelacakan git config branch.<name>.remote dan git config branch.<name>.merge (mungkin menggunakan git for-each-ref untuk membuat perintah untuk setiap nama cabang lokal).


52
2017-08-27 03:18



Output jawaban Anda jauh lebih ringkas dan lebih mudah diikuti, sehingga Anda mendapatkan suara naik :) - CubanX
Untuk membuatnya kurang ringkas, tetapi berikan cara yang bagus untuk memeriksa secara visual bahwa nama jarak jauh sama dengan nama cabang lokal, git gotcha umum: di bash git for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n' - hobs


Untuk cabang tertentu, Anda dapat menggunakan git rev-parse dengan @{u} atau @{upstream} akhiran pada nama cabang, misalnya:

$  git rev-parse --symbolic-full-name master@{u}
refs/remotes/github-mhl/master

... atau untuk formulir singkat, tambahkan --abbrev-ref

$ git rev-parse --symbolic-full-name --abbrev-ref master@{u}
github-mhl/master

Anda biasanya dapat menggunakan branch@{upstream} syntax dimanapun komit diharapkan.


18
2018-05-01 09:18



+1 Jawaban Anda memberi saya persis apa yang saya butuhkan: git rev-parse --symbolic-full-name HEAD vs. git rev-parse --symbolic-full-name HEAD@{u}terima kasih! - Tino


Saya menggunakan skrip shell berikut (bernama git-tracks) untuk menampilkan cabang jarak jauh yang dilacak oleh cabang saat ini:

#!/bin/sh -e
branch=$(git symbolic-ref HEAD)
branch=${branch##refs/heads/}
remote=$(git config "branch.${branch}.remote")
remoteBranch=$(git config "branch.${branch}.merge")
remoteBranch=${remoteBranch##refs/heads/}

echo "${remote:?}/${remoteBranch:?}"

Ini juga bisa menggunakan yang disebutkan git for-each-ref, tetapi saya menemukan akses langsung agak lebih sederhana daripada memfilter output untuk cabang saat ini.


10
2018-01-21 14:26



Anda mungkin mempertimbangkan menggunakan "set -e" di bagian atas skrip. Itu akan memungkinkan Anda untuk menghapus semua contoh "|| keluar $?" sementara tetap mempertahankan perilaku gagal-awal yang sama. - John Whitley
@JohnWhitley: Terima kasih, saya telah mengedit jawaban saya. Saya tahu tentang set -e, tetapi biasanya menempel pada pemeriksaan eksplisit. Tetapi dalam kasus ini, itu benar-benar lebih baik. - Ingo Karkat
Tidak bekerja untuk saya git version 1.9.4. Tidak ada apa-apa :( - Ain


.git/config file juga akan memberikan info cabang pelacakan sebagai

[remote "Hub"]
    url = ssh://xxxx/tmp/Hub
    fetch = +refs/heads/*:refs/remotes/Hub/*
[branch "develop"]
    remote = Hub
    merge = refs/heads/develop
[branch "Dev1"]
    remote = Test
    merge = refs/heads/Dev1
[remote "Test"]
    url = ssh://xxxx/tmp/gittesting/Dev1GIT
    fetch = +refs/heads/*:refs/remotes/Test/*

8
2017-10-11 12:59





git branch -vv

menunjukkan apa yang Anda minta. Ini menunjukkan cabang lokal bersama dengan cabang jarak jauh yang sesuai yang mereka lacak.


5
2018-05-07 07:50