Вопрос: Поведение по умолчанию «git push» без указанной ветви


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

git push origin sandbox

Если я говорю

git push origin

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

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

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

git push 
git push origin

originвыше - удаленный.

Я это понимаю git push [remote] [branch]будет толкать только эту ветвь на удаленный.


1205


источник


Ответы:


Вы можете управлять поведением по умолчанию, установив push.default в конфигурацию git. Из документация git-config (1) :

push.default

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

  • nothing: ничего не толкнуть

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

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

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

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

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

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

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

    Это станет дефолтом в Git 2.0.

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

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

Чтобы просмотреть текущую конфигурацию:

git config --global push.default

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

git config --global push.default current

1413



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

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

Из раздела «Примеры» git-pushсправочная страница


197



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

git config push.default current

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

git config --global push.default current

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

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

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

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

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

git config --global push.default simple

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


194



I just committed my code to a branch and pushed it to github, like this:

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

54



Here is a very handy and helpful information about Git Push: Git Push: Just the Tip

The most common use of git push is to push your local changes to your public upstream repository. Assuming that the upstream is a remote named "origin" (the default remote name if your repository is a clone) and the branch to be updated to/from is named "master" (the default branch name), this is done with: git push origin master

git push origin will push changes from all local branches to matching branches the origin remote.

git push origin master will push changes from the local master branch to the remote master branch.

git push origin master:staging will push changes from the local master branch to the remote staging branch if it exists.


22



(March 2012)
Beware: that default "matching" policy might change soon
(sometimes after git1.7.10+)
:

See "Please discuss: what "git push" should do when you do not say what to push?"

In the current setting (i.e. push.default=matching), git push without argument will push all branches that exist locally and remotely with the same name.
This is usually appropriate when a developer pushes to his own public repository, but may be confusing if not dangerous when using a shared repository.

The proposal is to change the default to 'upstream', i.e. push only the current branch, and push it to the branch git pull would pull from.
Another candidate is 'current'; this pushes only the current branch to the remote branch of the same name.

What has been discussed so far can be seen in this thread:

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

Previous relevant discussions include:

To join the discussion, send your messages to: git@vger.kernel.org


19



I just put this in my .gitconfig aliases section and love how it works:

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

Will push the current branch to origin with git pub or another repo with git pub repo-name. Tasty.


17



A git push will try and push all local branches to the remote server, this is likely what you do not want. I have a couple of conveniences setup to deal with this:

Alias "gpull" and "gpush" appropriately:

In my ~/.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`'

Thus, executing "gpush" or "gpull" will push just my "currently on" branch.


8