Поведение «git push» по умолчанию без указания ветки - PullRequest
1302 голосов
/ 04 июня 2009

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

git push origin sandbox

Если я скажу

git push origin

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

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

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

git push 
git push origin

origin выше - это пульт.

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

Ответы [ 12 ]

3 голосов
/ 19 апреля 2012

Вместо того, чтобы использовать псевдонимы, я предпочитаю создавать сценарии 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

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

2 голосов
/ 22 мая 2014

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

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
}
...