Domyślne zachowanie "git push" bez podanej gałęzi

Używam następującego polecenia, aby wcisnąć do mojej zdalnej gałęzi:

git push origin sandbox

If I say

git push origin

Czy to wypycha zmiany w innych moich gałęziach, czy tylko aktualizuje moją bieżącą gałąź? Mam trzy oddziały: master, production i sandbox.

Dokumentacja git push nie jest zbyt jasna, więc chciałbym to wyjaśnić na dobre.

Które gałęzie i piloty dokładnie aktualizują następujące polecenia git push?

git push 
git push origin

origin powyżej znajduje się zdalnie.

Rozumiem, że git push [remote] [branch] popchnie tylko tę gałąź do pilota.

Author: Nick Volynkin, 2009-06-04

12 answers

Możesz kontrolować domyślne zachowanie, ustawiając push.domyślne w konfiguracji git. Z dokumentacji git-config (1) :

push.default

Definiuje akcję, którą git push powinien wykonać, jeśli nie podano żadnego refspec w wierszu poleceń, żaden refspec nie jest skonfigurowany w zdalnym i żaden refspec nie jest implikowany przez którąkolwiek z opcji podanych w wierszu poleceń. Możliwe wartości to:

  • nothing: nie naciskaj niczego

  • matching: push all matching gałęzie

    Wszystkie gałęzie o tej samej nazwie na obu końcach są uważane za pasujące.

    Jest to wartość domyślna w Git 1.x.

  • upstream: W przeciwieństwie do innych gałęzi, które nie są w pełni kompatybilne z poprzednimi gałęziami, nie są w pełni kompatybilne z poprzednimi gałęziami.]}

  • current: wciśnij bieżącą gałąź do gałęzi o tej samej nazwie

  • simple: (nowy w Git 1.7.11) jak upstream, ale odmawia wciśnięcia, jeśli nazwa gałęzi upstream różni się od lokalnej one

    Jest to najbezpieczniejsza opcja i dobrze nadaje się dla początkujących.

    Będzie to domyślne w Git 2.0.

Tryby simple, current i upstream są przeznaczone dla tych, którzy chcą wypchnąć pojedynczą gałąź po zakończeniu pracy, nawet jeśli pozostałe gałęzie nie są jeszcze gotowe do wypchnięcia]}

Przykłady wiersza poleceń:

Aby wyświetlić bieżącą konfigurację:

git config --global push.default

Aby ustawić nową konfigurację:

git config --global push.default current
 1451
Author: UncleZeiv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-03 19:16:48

git push origin spowoduje wypchnięcie wszystkich zmian na lokalnych gałęziach, które mają pasujące gałęzie zdalne w origin tak jak dla git push

Działa tak, jak git push <remote>, Gdzie <remote> jest zdalną gałęzią bieżącej gałęzi (lub origin, jeśli żaden zdalny nie jest skonfigurowany dla bieżącej gałęzi).

Z sekcji przykłady git-push strona man

 198
Author: baudtack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-10 00:56:35

Możesz ustawić domyślne zachowanie Twojego Gita za pomocą push.default

git config push.default current

Lub jeśli masz wiele repozytoriów i chcesz to samo dla wszystkich to

git config --global push.default current

The current w tej konfiguracji oznacza, że domyślnie wciśniesz tylko bieżącą gałąź kiedy wykonasz git push

Inne opcje to:

  • nic : niczego nie naciskaj
  • dopasowanie: Push all matching branches (default)
  • śledzenie: naciśnij bieżącą gałąź to whatever it is tracking
  • current: Push the current branch

UPDATE-NOWY SPOSÓB NA TO

Od wersji Git 1.7.11 wykonaj następujące czynności:

git config --global push.default simple

Jest to nowe ustawienie, które działa w taki sam sposób jak current, i będzie domyślnie ustawione na git z v 2.0 zgodnie z plotkami

 195
Author: Christoffer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-12 23:06:25

Po prostu przekazałem swój kod do gałęzi i wrzuciłem go do Githuba, w ten sposób:

git branch SimonLowMemoryExperiments
git checkout SimonLowMemoryExperiments
git add .
git commit -a -m "Lots of experimentation with identifying the memory problems"
git push origin SimonLowMemoryExperiments
 55
Author: neoneye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-06 10:05:54

Oto bardzo przydatna i pomocna informacja o Git Push : Git Push: tylko końcówka

Najczęstszym zastosowaniem git push jest przesyłanie lokalnych zmian do publicznego repozytorium. Zakładając, że upstream jest zdalnym o nazwie "origin" (domyślna nazwa zdalnego repozytorium, jeśli Twoje repozytorium jest klonem), a gałąź, która ma zostać zaktualizowana do/Z ma nazwę "master" (domyślna nazwa gałęzi), można to zrobić za pomocą: git push origin master

git push origin wypchnie zmiany ze wszystkich lokalnych oddziałów aby dopasować gałęzie origin remote.

git push origin master wypchnie zmiany z lokalnej gałęzi master do zdalnej gałęzi master.

git push origin master:staging wypchnie zmiany z lokalnej gałęzi master do zdalnej gałęzi staging, jeśli taka istnieje.

 22
Author: Mukesh Chapagain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-10 14:26:07

(marzec 2012)
Uwaga: domyślna Polityka "matching " może wkrótce ulec zmianie
(czasami po git1.7.10+)
:

Patrz "proszę o dyskusję: co "git push" powinno zrobić, gdy nie mówisz co naciskać?"

W bieżącym ustawieniu (tj. push.default=matching), git push bez argumentu wypchnie wszystkie gałęzie, które istnieją lokalnie i zdalnie o tej samej nazwie .
Jest to zwykle właściwe, gdy deweloper wypycha do własnej publiczności repozytorium, ale może być mylące, jeśli nie niebezpieczne podczas korzystania ze współdzielonego repozytorium.

Proponuje zmienić domyślną wartość na 'upstream', tzn. wcisnąć tylko bieżącą gałąź i wcisnąć ją do gałęzi, z której mógłby wyciągnąć git pull.
Innym kandydatem jest ' current'; to popycha tylko bieżącą gałąź do zdalnej gałęzi o tej samej nazwie.

To, o czym do tej pory dyskutowano, można zobaczyć w tym wątek:

Http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

Poprzednie istotne dyskusje to:

Aby dołączyć do dyskusji, wyślij swoje wiadomości na adres: [email protected]

 19
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-17 11:13:18

Włożyłem to do mojego .sekcja aliasów gitconfig i uwielbiam jak to działa:

pub = "!f() { git push -u ${1:-origin} `git symbolic-ref HEAD`; }; f"

Popchnie bieżącą gałąź do origin za pomocą git pub lub innego repo za pomocą git pub repo-name. Smaczne.

 17
Author: Mat Schaffer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-23 18:36:59

Git push spróbuje wypchnąć wszystkie lokalne gałęzie na zdalny serwer, prawdopodobnie tego nie chcesz. Mam kilka udogodnień, aby sobie z tym poradzić:

Alias "gpull " i" gpush " odpowiednio:

W moim ~/.bash_profile

get_git_branch() {
  echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
}
alias gpull='git pull origin `get_git_branch`'
alias gpush='git push origin `get_git_branch`'

Tak więc, wykonanie " gpush "lub" gpull "spowoduje wypchnięcie tylko mojej gałęzi "currently on".

 8
Author: Cody Caughlan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-04 02:49:08

Możesz wcisnąć bieżącą gałąź za pomocą polecenia

git push origin HEAD

(wzięte z tutaj )

 7
Author: Andriy F.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:03

Możesz zmienić to domyślne zachowanie w swoim .gitconfig, na przykład:

[push]
  default = current

Aby sprawdzić bieżące ustawienia, uruchom:

git config --global --get push.default
 7
Author: kenorb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-20 11:57:54

Zamiast używać aliasów, wolę tworzyć skrypty git-XXX, aby móc je łatwiej kontrolować (nasi programiści mają pewien kontrolowany źródłowo katalog na swojej ścieżce dla tego typu rzeczy).

Ten skrypt (o nazwie git-setpush) ustawi wartość config dla remote.origin.push na coś, co tylko wypchnie bieżącą gałąź:

#!/bin/bash -eu

CURRENT_BRANCH=$(git branch | grep '^\*' | cut -d" " -f2)
NEW_PUSH_REF=HEAD:refs/for/$CURRENT_BRANCH

echo "setting remote.origin.push to $NEW_PUSH_REF"
git config remote.origin.push $NEW_PUSH_REF

Uwaga, ponieważ używamy Gerrit, ustawia cel na refs/for/XXX, aby wcisnąć gałąź przeglądu. Zakłada również, że origin jest Twoim zdalnym nazwisko.

Wywołaj go po sprawdzeniu gałęzi z

git checkout your-branch
git setpush

To oczywiście może być dostosowane do również zrobić checkout, ale lubię Skrypty zrobić jedną rzecz i zrobić to dobrze

 3
Author: Mark Fisher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-19 15:55:22

Dodałem następujące funkcje do mojego .plik bashrc do automatyzacji tych zadań. Wykonuje git push / git pull + nazwa bieżącej gałęzi.

function gpush()
{
  if [[ "x$1" == "x-h" ]]; then
    cat <<EOF
Usage: gpush
git: for current branch: push changes to remote branch;
EOF
  else
    set -x
    local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
    git push ${bname}
    set +x
  fi
}

function gpull()
{
  if [[ "x$1" == "x-h" ]]; then
    cat <<EOF
Usage: gpull
git: for current branch: pull changes from
EOF
  else
    set -x
    local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
    git pull ${bname}
    set +x
  fi
}
 2
Author: MichaelMoser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-04 10:51:15