Git - нажать текущий ярлык ветки

Есть ли ярлык, позволяющий Git выдвинуть текущую ветвь отслеживания в исходную точку?
Примечание: я знаю, что могу изменить поведение push по умолчанию, но я ищу специальное решение, которое не меняет поведение по умолчанию.

Например, предположим, что я нахожусь на ветке feature/123-sandbox-tests Я бы использовал

git push origin feature/123-sandbox-tests

что утомительно. Я ищу ярлык, что-то вроде

git push origin current

где Git знает, что ток feature/123-sandbox-tests,


Редактировать: Начиная с версии 2.0, поведение git по умолчанию изменилось на более интуитивное, чего я и хотел добиться. Смотрите этот ТАК вопрос для деталей.

Правка 2: ответ ceztko - лучший ответ, поскольку он позволяет нажать текущую ветку, независимо от настроек.

8 ответов

Решение

В соответствии с git push документация:

git push origin HEAD
    A handy way to push the current branch to the same name on the remote.

Поэтому я думаю, что вам нужно git push origin HEAD, Также это может быть полезно git push -u origin HEAD установить информацию об отслеживании в восходящем направлении в локальной ветке, если вы еще не выдвинулись к источнику.

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

git config --global push.default current

тогда просто делай

git push 

это подтолкнет код к вашей текущей ветке.

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

В основном это объясняет, как установить поведение по умолчанию, чтобы выдвинуть вашу текущую ветвь, просто выполняя git push, Вероятно, вам нужно:

git config --global push.default current

Другие опции:

  • ничего: не толкай ничего
  • соответствие: Нажмите все соответствующие ветви
  • upstream/tracking: подтолкнуть текущую ветку к тому, что отслеживает
  • current: нажать текущую ветку

Я использую такой псевдоним в моем конфиге.bashrc

alias gpb='git push origin `git rev-parse --abbrev-ref HEAD`'

По команде $gpb он берет текущее имя ветки и отправляет его в начало координат.

Вот мои другие псевдонимы:

alias gst='git status'
alias gbr='git branch'
alias gca='git commit -am'
alias gco='git checkout'

Для чего это стоит, конечный ярлык:

В моем .bash_profile я имею alias push="git push origin HEAD"так что всякий раз, когда я печатаю push Я знаю, что нажимаю на текущую ветку, в которой я нахожусь.

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

git branch --set-upstream feature/123-sandbox-tests origin/feature/123-sandbox-tests

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

Если вы хотите отправить текущую ветку только с помощью команды push, вы можете изменить поведение push на upstream:

git config --global push.default upstream

Самый простой способ: беги git push -u origin feature/123-sandbox-tests один раз. Это продвигает ветку так, как вы привыкли это делать, а также устанавливает информацию об отслеживании восходящего потока в вашей локальной конфигурации. После этого вы можете просто git push выдвинуть отслеживаемые ветви к их вышестоящему пульту (ам).

Вы также можете сделать это в конфиге самостоятельно, установив branch.<branch name>.merge на имя удаленной ветви (в вашем случае такое же, как локальное имя) и, необязательно, branch.<branch name>.remote на имя пульта, к которому вы хотите нажать (по умолчанию - источник). Если вы посмотрите в своем конфиге, скорее всего, уже один из них установлен для master так что вы можете последовать этому примеру.

Наконец, убедитесь, что вы считаете push.default установка. По умолчанию используется "соответствие", что может привести к нежелательным и неожиданным результатам. Большинство людей, которых я знаю, считают "восходящий поток" более интуитивным, что подталкивает только текущую ветку.

Подробную информацию о каждой из этих настроек можно найти на странице руководства git-config.

Если подумать, перечитав ваш вопрос, я думаю, вы все это знаете. Я думаю, что вы на самом деле ищете не существует. Как насчет функции bash что-то вроде (не проверено):

function pushCurrent {
  git config push.default upstream
  git push
  git config push.default matching
}

С помощью ответа ceztko я написал эту маленькую вспомогательную функцию, чтобы сделать мою жизнь проще:

function gpu()
{
    if git rev-parse --abbrev-ref --symbolic-full-name @{u} > /dev/null 2>&1; then
        git push origin HEAD
    else
        git push -u origin HEAD
    fi
}

Он переводит текущую ветвь в исходную, а также устанавливает удаленную ветвь отслеживания, если она еще не настроена.

Другие вопросы по тегам