Git – comandă rapidă pentru a împinge ramura curentă (Programare, Git)

Elad a intrebat.

Există o scurtătură pentru a spune lui Git să împingă ramura curentă de urmărire la origine?
Notă: Știu că pot schimba comportamentul implicit de împingere, dar caut o soluție ad-hoc care să nu schimbe comportamentul implicit.

De exemplu, să presupunem că mă aflu pe ramura feature/123-sandbox-tests Aș folosi

git push origin feature/123-sandbox-tests

ceea ce este plictisitor. Caut o scurtătură, ceva de genul

git push origin current

unde git știe că curentul este feature/123-sandbox-tests.


Editați: Începând cu versiunea 2.0, git’s implicit s-a schimbat într-un comportament mai intuitiv, ceea ce este ceea ce am vrut să obțin. Consultați Această întrebare SO pentru detalii.

Editare 2: răspunsul lui ceztko este cel mai bun răspuns, deoarece permite să împingă ramura curentă, indiferent de setări.

8 răspunsuri
ceztko

În conformitate cu git push documentația:

git push origin HEAD
    A handy way to push the current branch to the same name on the remote.

Deci, cred că ceea ce aveți nevoie este git push origin HEAD. De asemenea, poate fi util git push -u origin HEAD să setați informațiile de urmărire în amonte în ramura locală, dacă nu ați făcut deja un push la origine.

Comentarii

  • Prefer acest lucru în locul setării push.default la simple sau current, deoarece diferite mașini ar putea avea setări diferite. Este posibil să vă obișnuiți cu git push să împingeți doar ramura curentă, dar pe alte mașini, este posibil să împingeți din greșeală toate ramurile corespunzătoare. –  > Por wisbucky.
  • @wisbucky Am mai multe pseudonime, inclusiv co, așa că, dacă aș încerca măcar să trag în jos și apoi să verific codul fără ~/.gitconfig fișier pe acel VM, voi ști imediat. Asta îmi permite să mă simt destul de sigur în legătură cu schimbarea implicită a push-ului la upstream. –  > Por Damon.
  • Interesant că acest lucru nu funcționează doar cu @, care este documentat ca fiind un alias valid pentru HEAD. (de ex. git push -u origin @) –  > Por void.pointer.
  • Răspunsul de la stackoverflow.com/a/30706402/850996 este un răspuns mai corect la întrebarea din OP –  > Por Shyam Habarakada.
  • @ShyamHabarakada ei bine, OP a editat întrebarea afirmând că „răspunsul lui ceztko este cel mai bun răspuns, deoarece permite împingerea ramurii curente, indiferent de setările” –  > Por ceztko.
Mahesh

Puteți configurați git să împingă pe ramura curentă folosind următoarea comandă

git config --global push.default current

apoi faceți doar

git push 

acest lucru va împinge codul în ramura curentă.

Comentarii

  • Are sens să adăugați push = refs/heads/current:refs/for/master/current la o secțiune „remote” în .git/config? Adică, este ‘current’ un cuvânt special aici? Sau va căuta o ramură numită „current”? –  > Por David Doria.
  • @DavidDoria ‘current’ nu este o ramură numită aici. –  > Por Mahesh.
  • Cel mai bun lucru git push -u origin feature_branch_name pentru a configura upstream/tracking! Dacă folosiți un depozit la distanță, cel puțin. –  > Por Flo.
  • Nu-mi pot imagina un flux de lucru în care „push master chiar și atunci când nu sunt pe master” să fie un default sănătos. Presupun că dacă master nu este o ramură importantă și nu te deranjează ca orice gunoi netestat, nerevizuit și probabil nesigur să ajungă pe ea, atunci cred că aceste valori implicite nu sunt dăunătoare, dar pentru orice alt flux de lucru, această valoare implicită pare periculoasă. –  > Por weberc2.
Najor

Ar trebui să aruncați o privire la o întrebare similară în Comportamentul implicit al „git push” fără o ramură specificată

Practic, se explică cum să setați comportamentul implicit pentru a împinge ramura curentă doar executând git push. Probabil că ceea ce ai nevoie este:

git config --global push.default current

Alte opțiuni:

  • nimic : Nu apăsați nimic
  • care corespunde : Împingeți toate ramurile corespunzătoare
  • upstream/urmărire : Împingeți ramura curentă către orice ramură pe care o urmărește
  • curent : Împingeți ramura curentă

theodor

Eu folosesc un astfel de alias în configurația mea .bashrc

alias gpb='git push origin `git rev-parse --abbrev-ref HEAD`'

La comanda $gpb aceasta ia numele ramurii curente și îl împinge la origine.

Iată celelalte alias-uri ale mele:

alias gst='git status'
alias gbr='git branch'
alias gca='git commit -am'
alias gco='git checkout'

Ryan Rebo

Pentru ceea ce merită, cea mai bună scurtătură:

În fișierul meu .bash_profile am alias push="git push origin HEAD", așa că ori de câte ori scriu push știu că fac push la ramura curentă pe care mă aflu.

Faruk Sahin

Dacă utilizați git 1.7.x, puteți rula următoarea comandă pentru a seta ramura de urmărire la distanță.

git branch --set-upstream feature/123-sandbox-tests origin/feature/123-sandbox-tests

Apoi puteți utiliza pur și simplu git push pentru a împinge toate modificările. Pentru un răspuns mai complet, vă rugăm să consultați răspunsul acceptat la o întrebare similară aici.

Dacă doriți să împingeți doar ramura curentă cu comanda push, atunci puteți schimba comportamentul push la upstream:

git config --global push.default upstream

Comentarii

  • Mulțumesc, însă în acest caz nu ar trebui ca TOATE ramurile de urmărire să fie împinse la origine? –  > Por Elad.
  • Am modificat răspunsul, vă rog să consultați link-ul, răspunsul este mai complet acolo. –  > Por Faruk Sahin.
  • Din nou, problema este că toate ramurile care sunt ramuri de urmărire sunt împinse în acest fel. După cum am scris în întrebarea mea, ramura este în primul rând o ramură de urmărire, deci cred că setarea ramurii în amonte, așa cum ați sugerat, este redundantă. Sau mă înșel? –  > Por Elad.
  • Atunci puteți configura git pentru a împinge doar ramura curentă prin modificarea comportamentului git push. git config --global push.default upstream va seta comportamentul de push pentru a împinge doar ramura curentă. –  > Por Faruk Sahin.
Ryan Stewart

Cel mai simplu mod: rulați git push -u origin feature/123-sandbox-tests o singură dată. Aceasta împinge ramura în modul în care obișnuiești să o faci și, de asemenea, setează informațiile de urmărire din amonte în configurația locală. După aceea, puteți doar git push pentru a împinge ramurile urmărite către locația (locațiile) lor din amonte.

De asemenea, puteți face acest lucru în configurație, setând branch.<branch name>.merge la numele ramurii de la distanță (în cazul dvs. același cu numele local) și opțional, branch.<branch name>.remote la numele ramurii de la distanță către care doriți să faceți push (valoarea implicită este origin). Dacă vă uitați în configurare, cel mai probabil există deja una dintre acestea setată pentru master, așa că puteți urma acest exemplu.

În cele din urmă, asigurați-vă că aveți în vedere opțiunea push.default setare. Aceasta este implicită la „matching”, ceea ce poate avea rezultate nedorite și neașteptate. Cei mai mulți oameni pe care îi cunosc consideră mai intuitiv „upstream”, care împinge doar ramura curentă.

Detalii despre fiecare dintre aceste setări pot fi găsite în secțiunea pagina de manual git-config.

Dacă mă gândesc mai bine, după ce ți-am recitit întrebarea, cred că știi toate acestea. Cred că ceea ce căutați de fapt nu există. Ce zici de o funcție bash ceva de genul (netestat):

function pushCurrent {
  git config push.default upstream
  git push
  git config push.default matching
}

Bantak

Cu ajutorul răspunsului lui ceztko am scris această mică funcție ajutătoare pentru a-mi face viața mai ușoară:

function gpu()
{
    if git rev-parse --abbrev-ref --symbolic-full-name @{u} > /dev/null 2>&1; then
        git push origin HEAD
    else
        git push -u origin HEAD
    fi
}

Aceasta împinge ramura curentă în origin și, de asemenea, stabilește ramura de urmărire la distanță dacă nu a fost încă configurată.

Tags: