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.
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łęzieWszystkie 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 -
Jest to najbezpieczniejsza opcja i dobrze nadaje się dla początkujących.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 oneBę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
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
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
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
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.
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:
- http://thread.gmane.org/gmane.comp.version-control.git/123350/focus=123541
- http://thread.gmane.org/gmane.comp.version-control.git/166743
Aby dołączyć do dyskusji, wyślij swoje wiadomości na adres: [email protected]
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.
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".
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
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
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
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
}
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