Поведение по умолчанию "git push" без указанной ветви



я использую следующую команду, чтобы нажать на мою удаленную ветку:



git push origin sandbox


если я говорю



git push origin


это также подталкивает изменения в других моих ветвях или только обновляет мою текущую ветвь? У меня есть три ветви: master,production и sandbox.



The git push документация не очень ясна об этом, поэтому я хотел бы прояснить это навсегда.



какие ветви и пульты ДУ делают следующее git push обновление команды точно?



git push 
git push origin


origin выше находится пульт дистанционного управления.



Я понимаю, что git push [remote] [branch] будет нажимать только эту ветку на пульт дистанционного управления.

1044   12  

12 ответов:

вы можете управлять поведением по умолчанию пуш.по умолчанию в вашей конфигурации git. От документация git-config(1):

push.default

определяет действие, которое git push должен предпринять, если в командной строке не указан refspec, не настроен refspec в удаленном устройстве и не подразумевается ни один из параметров, указанных в командной строке. Возможные значения:

  • nothing: не давить все что угодно

  • matching: нажмите все соответствующие ветви

    все ветви, имеющие одинаковое имя на обоих концах, считаются совпадающими.

    это по умолчанию в Git 1.x.

  • upstream: передвиньте текущую ветвь к ее восходящей ветви (tracking является устаревшим синонимом для upstream)

  • current: нажмите текущую ветвь на ветвь того же самого имя

  • simple: (новый в Git 1.7.11) как вверх по течению, но отказывается нажимать, если имя восходящей ветви отличается от локального

    это самый безопасный вариант и хорошо подходит для начинающих.

    это станет по умолчанию в Git 2.0.

простые, текущие и восходящие режимы предназначены для тех, кто хочет выталкивать одну ветвь после окончания работы, даже когда другие ветви еще не готов к вытеснению

примеры командной строки:

для просмотра текущей конфигурации:

git config --global push.default

установить новую конфигурацию:

git config --global push.default current

git push origin будет нажимать все изменения на локальных ветвях, которые имеют соответствующие удаленные ветви в origin по состоянию на git push

работы как git push <remote>, где <remote> является удаленным текущим филиалом (или источником, если для текущего филиала не настроен ни один удаленный).

из раздела примеры git-push на странице

вы можете настроить поведение по умолчанию для вашего git с помощью push.по умолчанию

git config push.default current

или если у вас есть много репозиториев и хотите то же самое для всех, то

git config --global push.default current

The настоящее в Данная настройка означает, что по умолчанию вы будете только нажмите на текущую ветку когда вы git push

другие варианты:

  • ничего : не нажимайте ничего
  • соответствие: нажмите все соответствующие ветви (по умолчанию)
  • отслеживание: нажмите текущую ветвь на то, что она отслеживает
  • current: нажмите на текущую ветку

ОБНОВЛЕНИЕ-НОВЫЙ СПОСОБ СДЕЛАТЬ ЭТО

начиная с Git 1.7.11 выполните следующие действия:

git config --global push.default simple

Это новый параметр введен, который работает так же, как текущий, и будет сделан по умолчанию для git от v 2.0 По слухам

Я просто передал свой код в ветку и нажал его на github, вот так:

git branch SimonLowMemoryExperiments
git checkout SimonLowMemoryExperiments
git add .
git commit -a -m "Lots of experimentation with identifying the memory problems"
git push origin SimonLowMemoryExperiments

здесь очень удобная и полезная информация о Git Push: git Push: только кончик

наиболее распространенным использованием git push является передача локальных изменений в общедоступный репозиторий восходящего потока. Предполагая, что восходящий поток является удаленным именем " origin "(удаленное имя по умолчанию, если ваш репозиторий является клоном), а ветвь, подлежащая обновлению,называется "master" (имя ветви по умолчанию), это делается с помощью:git push origin master

git push origin будет толкать изменяется от всех локальных ветвей к соответствующим ветвям удаленного источника.

git push origin master будет передавать изменения из локальной ветки master в удаленную ветку master.

git push origin master:staging переместит изменения из локальной главной ветви в удаленную промежуточную ветвь, если она существует.

(март 2012 года)
осторожно: это по умолчанию"matching" политика может измениться в ближайшее время
(иногда после git1. 7. 10+)
:

в разделе "пожалуйста, обсудите: что "git push" должен делать, когда вы не говорите, что нажимать?"

в сложившейся обстановке (т. е. push.default=matching),git push без аргумента будет толкать все ветви, которые существуют локально и удаленно с тем же именем.
Это обычно подходит, когда разработчик нажимает на свой собственный публичный репозиторий, но может быть запутанным, если не опасным при использовании общего репозитория.

предложение измените значение по умолчанию на'upstream', т. е. нажмите только текущую ветвь и нажмите ее на ветвь, из которой будет тянуть git.
Еще один кандидат -'current'; это толкает только текущую ветвь к удаленной ветви с тем же именем.

что обсуждалось до сих пор может можно увидеть в этой теме:

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

предыдущие соответствующие обсуждения включают в себя:

присоединиться к обсуждение, отправляйте свои сообщения по адресу: [email protected]

Я просто положил это в моем .gitconfig псевдонимы раздел и любовь, как это работает:

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

будет толкать текущую ветвь в начало координат с git pub или другое РЕПО с git pub repo-name. Вкусный.

git push попытается нажать все локальные ветви на удаленный сервер, это, вероятно, то, что вы не хотите. У меня есть несколько настроек удобства, чтобы справиться с этим:

псевдоним "gpull " и" gpush " соответственно:

в моем ~/.файл

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

таким образом, выполнение "gpush" или "gpull" будет нажимать только мою ветку "в настоящее время".

вы можете нажать текущую ветку с помощью команды

git push origin HEAD

(взял из здесь)

вы можете изменить это поведение по умолчанию в папке .gitconfig, например:

[push]
  default = current

чтобы проверить текущие настройки, запустите:

git config --global --get push.default

вместо того, чтобы использовать псевдонимы, я предпочитаю создавать сценарии git-XXX, чтобы я мог управлять ими более легко (у всех наших разработчиков есть определенный управляемый источник dir на их пути для этого типа вещей).

этот скрипт (так называемый git-setpush) установит значение конфигурации для remote.origin.push значение для чего - то, что будет только толкать текущую ветку:

#!/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

обратите внимание, как мы используем Gerrit устанавливает цели refs/for/XXX нажать в ветку обзора. Это также предполагается, что origin-это ваше удаленное имя.

вызовите его после проверки ветви с

git checkout your-branch
git setpush

он, очевидно, может быть адаптирован также для проверки, но мне нравятся скрипты делай одно и делай это хорошо

Я добавил следующие функции в моем .файл bashrc для автоматизации этих задач. Он делает git push / git pull + имя текущей ветви.

function gpush()
{
  if [[ "x" == "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" == "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
}

Comments

    Ничего не найдено.