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
}
Он переводит текущую ветвь в исходную, а также устанавливает удаленную ветвь отслеживания, если она еще не настроена.