Apa yang saya'm mencoba untuk lakukan adalah cek versi. Saya ingin memastikan kode tetap di atas versi minimum. Jadi saya perlu cara untuk mengetahui jika saat ini cabang berisi ditentukan komit.
Ada beberapa cara untuk mencapai hasil ini. Pertama naif pilihan adalah dengan menggunakan git log
dan buku tertentu komit menggunakan grep
, tapi itu tidak selalu tepat
git log | grep <commit_id>
Anda akan lebih baik untuk menggunakan git branchlangsung untuk menemukan semua cabang yang mengandung diberikan
COMMIT_ID` menggunakan
git branch --contains $COMMIT_ID
Langkah berikutnya adalah mencari tahu saat ini cabang yang dapat dilakukan sejak git 1.8.1
menggunakan
git symbolic-ref --short HEAD
Dan digabungkan bersama-sama sebagai
git branch $(git symbolic-ref --short HEAD) --contains $COMMIT_ID
Tapi perintah di atas doesn't return true atau false, dan ada versi yang lebih pendek yang kembali keluar kode 0 jika melakukan ini di saat ini cabang ATAU keluar kode 1 jika tidak
git merge-base --is-ancestor $COMMIT_ID HEAD
Kode keluar bagus, tapi seperti yang anda inginkan string true
atau false
sebagai jawaban yang anda butuhkan untuk menambahkan sedikit lebih banyak dan kemudian dikombinasikan dengan jika
dari bash anda dapatkan
if [ 0 -eq $(git merge-base --is-ancestor $COMMIT_ID HEAD) ]; then echo "true"; else echo "false"; fi
Dapatkan daftar branch(es) yang berisi spesifik komit.
# get all the branches where the commit exists
$ git branch --contains <commit-id>
Memeriksa apakah suatu cabang tertentu yang melakukan.
# output the branch-name if the commit exists in that branch
$ git branch --contains <commit-id> | grep <branch-name>
Pencarian cabang (katakanlah, fitur
) dengan pencocokan tepat.
$ git branch --contains <commit-id> | grep -E '(^|\s)feature$'
misalnya Jika anda memiliki 3 cabang lokal yang disebut tidur
, fitur1
, feature2
kemudian
$ git branch --contains <commit-id> | grep 'feature'
# output
feature
feature1
feature2
$ git branch --contains <commit-id> | grep -E '(^|\s)feature$'
# output
feature
Anda juga dapat mencari di kedua lokal
dan remote
cabang (gunakan -a
) atau hanya di remote
cabang (gunakan -r
).
# search in both 'local' & 'remote' branches
$ git branch -a --contains <commit-id> | grep -E '(^|\s)feature$'
# search in 'remote' branches
$ git branch -r --contains <commit-id> | grep -E '(^|\s)feature$'
Diekstrak komentar oleh @torek sebagai jawaban:
Melihat diusulkan duplikat untuk bagaimana untuk menemukan semua cabang yang mengandung ditentukan komit.
Untuk mengetahui apakah saat ini ** branch berisi komit C, gunakan "pipa" perintah git merge-dasar-adalah-nenek moyang`. Saat ini cabang yang berisi C jika C adalah nenek moyang dari KEPALA, sehingga:
if git merge-base --is-ancestor $hash HEAD; then
echo I contain commit $hash
else
echo I do not contain commit $hash
fi
(Catatan: dalam skrip shell, perintah yang keluar nol adalah "benar" sementara yang keluar bukan nol adalah "salah".)
Ya alternatif lain:
git rev-daftar <nama cabang> | grep `git rev-mengurai <melakukan>`
Ini bekerja terbaik bagi saya karena hal ini juga akan bekerja pada cache lokal remote cabang seperti remote/asal/master
, di mana git branch --mengandung
tidak't bekerja.
Ini mencakup lebih dari OP's pertanyaan tentang "saat ini cabang" tapi saya merasa bodoh untuk bertanya "setiap cabang" versi dari pertanyaan ini jadi saya memutuskan untuk posting di sini pula.
Karena pertanyaan ini memiliki beberapa nice scripty jawaban, aku'm menambahkan favorit saya.
Yang satu ini akan menunjukkan kepada anda, untuk yang terakhir $n
melakukan $br
yang berisi masing-masing cabang:
br=mybranch
n=10
git log --oneline -n$n $br | awk '{print; system("git branch --contains "$1)}'
Ini serupa tetapi tidak sama untuk daftar cabang:
br="mybranch yourbranch herbranch"
n=4
for br in $brs; do git log --oneline -n$n $br | awk '{print; system("git branch --contains "$1)}'; done