Ceea ce am'm încercat să fac este o versiune a verifica. Vreau să asigure codul rămâne pe partea de sus de o versiune minimă. Deci am nevoie de o modalitate de a ști dacă ramura curentă conține o anumită comis-o.
Există mai multe modalități de a obține acest rezultat. Prima naiv opțiune este de a utiliza git log
și de căutare pentru un anumit comite folosind grep
, dar că nu este întotdeauna precis
git log | grep <commit_id>
Esti mai bine să folosim git branchdirect pentru a găsi toate ramurile conțin dat
COMMIT_ID` folosind
git branch --contains $COMMIT_ID
Următorul pas este de a afla ramură de curent care poate fi făcut din git 1.8.1
folosind
git symbolic-ref --short HEAD
Și combinate împreună, ca
git branch $(git symbolic-ref --short HEAD) --contains $COMMIT_ID
Dar comanda de mai sus nu't return true sau false și nu există o versiune mai scurtă care returnează codul de ieșire 0 dacă se angajeze în actuala sucursală SAU cod de ieșire 1 dacă nu
git merge-base --is-ancestor $COMMIT_ID HEAD
Codul de ieșire este frumos, dar ca vrei șir de "adevărat" sau "fals" ca răspunsul de care ai nevoie pentru a adăuga un pic mai mult, și apoi combinate cu "dacă" din bash ai
if [ 0 -eq $(git merge-base --is-ancestor $COMMIT_ID HEAD) ]; then echo "true"; else echo "false"; fi
Obține o listă de ramură(es) care conține specifice a comis-o.
# get all the branches where the commit exists
$ git branch --contains <commit-id>
Verificați dacă o ramură specifică a comis-o.
# output the branch-name if the commit exists in that branch
$ git branch --contains <commit-id> | grep <branch-name>
Căutare ramura (să zicem, "facilitate") cu potrivire exactă.
$ git branch --contains <commit-id> | grep -E '(^|\s)feature$'
de exemplu Dacă aveți 3 filiale locale numite "facilitate", feature1
, feature2
atunci
$ git branch --contains <commit-id> | grep 'feature'
# output
feature
feature1
feature2
$ git branch --contains <commit-id> | grep -E '(^|\s)feature$'
# output
feature
Puteți căuta, de asemenea, în ambele "locale" și "la distanță" ramuri (use -o
) sau numai în "la distanță" ramuri (use -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$'
Extras comentariu de @torek ca raspuns:
Vezi propuse duplicat pentru modul de a găsi toate ramurile care conțin un anumit comis-o.
Pentru a afla dacă curent ramură conține comite C, utilizați "instalatii sanitare" comanda `git merge-de bază-este-strămoșilor. Ramura curentă conține C dacă C este un strămoș al CAPULUI, astfel:
if git merge-base --is-ancestor $hash HEAD; then
echo I contain commit $hash
else
echo I do not contain commit $hash
fi
(Notă: în scripturi shell, o comandă care iese zero este "adevărat" în timp ce unul care iese nenul este "false".)
Da o altă alternativă:
git rev-lista <nume de ramură> | grep `git rev-analiza <comit>`
Acest lucru funcționează cel mai bine pentru mine, deoarece s-ar lucra, de asemenea, pe plan local cache la distanță ramuri cum ar fi telecomenzi/origine/de master, pe care `git branch-conține câștigat't de lucru.
Acesta acoperă mai mult de OP's întrebarea despre "curent branch" dar mi se pare de prost de a cere un "orice filială" versiune de această întrebare, așa că am decis pentru a posta aici, oricum.
Din această cauză are un frumos scripty răspunsuri, am'm adăugarea preferatele mele.
Acesta vă va arăta, pentru ultima $n
se angajează în $br
ramuri care conține fiecare:
br=mybranch
n=10
git log --oneline -n$n $br | awk '{print; system("git branch --contains "$1)}'
Acesta este similar, dar nu la fel pentru o listă de filiale:
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