Git - naciśnij aktualny skrót do gałęzi

363

Czy istnieje skrót, aby powiedzieć Gitowi, aby przesunął bieżącą gałąź śledzenia do początku?
Uwaga: Wiem, że mogę zmienić domyślne zachowanie push , ale szukam rozwiązania ad-hoc, które nie zmienia domyślnego zachowania.

Załóżmy na przykład, że jestem na gałęzi feature/123-sandbox-tests, której będę używać

git push origin feature/123-sandbox-tests

co jest nużące. Szukam skrótu, coś w rodzaju

git push origin current

gdzie git wie, że jest prąd feature/123-sandbox-tests.


Edycja : Począwszy od wersji 2.0 domyślne zachowanie git zmieniło się na bardziej intuicyjne, co chciałem osiągnąć. Zobacz to pytanie SO, aby uzyskać szczegółowe informacje.

Edycja 2 : odpowiedź ceztko jest najlepszą odpowiedzią, ponieważ pozwala przesuwać bieżącą gałąź, niezależnie od ustawień.

Elad
źródło

Odpowiedzi:

701

Według git pushdokumentacji:

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

Myślę więc, że potrzebujesz git push origin HEAD. Przydatne może być git push -u origin HEADrównież ustawienie informacji o śledzeniu wysyłania w lokalnym oddziale, jeśli jeszcze nie wysłałeś do źródła.

Ceztko
źródło
11
Wolę to niż ustawienie push.default na proste lub bieżące, ponieważ różne maszyny mogą mieć inne ustawienia. Możesz przyzwyczaić się do git pushwypychania tylko bieżącej gałęzi, ale na innych komputerach możesz przypadkowo wypchnąć wszystkie pasujące gałęzie.
wisbucky
1
@wisbucky Mam kilka aliasów, w tym co, więc jeśli spróbuję nawet rozwinąć, a następnie sprawdzić kod bez mojego ~/.gitconfigpliku na tej maszynie wirtualnej, natychmiast go poznam. To pozwala mi czuć się bezpiecznie przy zmianie domyślnej wartości push na upstream.
Damon
9
Ciekawe, że to nie działa z just @, co jest udokumentowane jako prawidłowy alias do HEAD. (np. git push -u origin @)
void.pointer
196

Możesz skonfigurować git, aby przekazywał do bieżącej gałęzi za pomocą następującego polecenia

git config --global push.default current

to po prostu zrób

git push 

spowoduje to wypchnięcie kodu do twojego aktualnego oddziału.

Mahesh
źródło
Czy ma sens dodawanie push = refs/heads/current:refs/for/master/currentdo „zdalnej” sekcji w .git / config? To znaczy, czy „aktualne” jest tutaj szczególnym słowem? Czy będzie szukał gałęzi o nazwie „prąd”?
David Doria,
6
@DavidDoria „current” nie jest tu wymienioną gałęzią.
Mahesh
Najlepiej zrobić, git push -u origin feature_branch_nameaby skonfigurować upstream / śledzenie! Jeśli używasz przynajmniej zdalnego repozytorium.
Flo
40

Powinieneś spojrzeć na podobne pytanie w Domyślnym zachowaniu „git push” bez określonej gałęzi

Zasadniczo wyjaśnia, w jaki sposób ustawić domyślne zachowanie, aby wypychać bieżący oddział tylko do działania git push. Prawdopodobnie potrzebujesz:

git config --global push.default current

Inne opcje:

  • nic : niczego nie pchaj
  • dopasowanie : Wciśnij wszystkie pasujące gałęzie
  • upstream / tracking : Wciśnij bieżącą gałąź do tego, co śledzi
  • current : Naciśnij bieżącą gałąź
Najor
źródło
11

Używam takiego aliasu w mojej konfiguracji .bashrc

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

Na polecenie $gpbpobiera bieżącą nazwę gałęzi i wypycha ją do źródła.

Oto moje inne pseudonimy:

alias gst='git status'
alias gbr='git branch'
alias gca='git commit -am'
alias gco='git checkout'
teodor
źródło
8

Dla tego, co jest warte, najlepszy skrót:

W moim .bash_profilemam alias push="git push origin HEAD", więc za każdym razem, gdy pushpiszę, wiem, że naciskam na bieżący oddział, w którym jestem.

Ryan Rebo
źródło
6

Jeśli używasz git 1.7.x, możesz uruchomić następujące polecenie, aby ustawić gałąź zdalnego śledzenia.

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

Następnie możesz po prostu użyć git pushdo popchnięcia wszystkich zmian. Aby uzyskać bardziej kompletną odpowiedź, zobacz akceptowaną odpowiedź na podobne pytanie tutaj.

Jeśli chcesz tylko wypchnąć bieżącą gałąź za pomocą polecenia push, możesz zmienić zachowanie push na upstream:

git config --global push.default upstream
Faruk Sahin
źródło
Dzięki, jednak w tym przypadku WSZYSTKIE gałęzie śledzące nie zostaną wypchnięte do źródła?
Elad,
Zmodyfikowałem odpowiedź, proszę zobaczyć link, odpowiedź jest tam bardziej kompletna.
Faruk Sahin,
Ponownie problem polega na tym, że wszystkie gałęzie, które śledzą, są wypychane w ten sposób. Jak napisałem w moim pytaniu, gałąź jest przede wszystkim gałęzią śledzoną, więc myślę, że ustawienie gałęzi upstream zgodnie z sugestią jest zbędne. A może się mylę?
Elad,
Następnie możesz skonfigurować git, aby wypychał tylko bieżącą gałąź, zmieniając zachowanie git push. git config --global push.default upstreamustawia zachowanie push tak, aby wypychało tylko bieżącą gałąź.
Faruk Sahin
5

Najprostszy sposób: uruchom git push -u origin feature/123-sandbox-testsraz. To popycha gałąź w sposób, w jaki jesteś do tego przyzwyczajony, a także ustawia informacje o śledzeniu wysyłania w lokalnej konfiguracji. Następnie możesz po prostu git pushwcisnąć śledzone gałęzie do ich zdalnych pilotów.

Możesz to również zrobić w konfiguracji samodzielnie, ustawiając branch.<branch name>.mergenazwę zdalnego oddziału (w twoim przypadku taką samą jak nazwa lokalna) i opcjonalnie branch.<branch name>.remotena nazwę zdalnego, na który chcesz pchać (domyślnie do źródła). Jeśli spojrzysz na swoją konfigurację, najprawdopodobniej jest już jeden z tych zestawów master, więc możesz pójść za tym przykładem.

Na koniec upewnij się, że wziąłeś pod uwagę push.defaultustawienie. Domyślnie jest to „dopasowanie”, które może mieć niepożądane i nieoczekiwane wyniki. Większość ludzi, których znam, uważa, że ​​„upstream” jest bardziej intuicyjny, co popycha tylko obecną gałąź.

Szczegóły dotyczące każdego z tych ustawień można znaleźć na stronie man git-config .

Po namyśle, po ponownym przeczytaniu twojego pytania, myślę, że wiesz wszystko. Myślę, że to, czego tak naprawdę szukasz, nie istnieje. Co powiesz na funkcję bash coś takiego (niesprawdzony):

function pushCurrent {
  git config push.default upstream
  git push
  git config push.default matching
}
Ryan Stewart
źródło
1

Za pomocą odpowiedzi Ceztko napisałem tę funkcję pomocnika, aby ułatwić mi życie:

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
}

Pcha bieżącą gałąź do początku, a także ustawia gałąź zdalnego śledzenia, jeśli nie została jeszcze skonfigurowana.

Bantak
źródło