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

365

Есть ли ярлык, чтобы сказать 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 - лучший ответ, поскольку он позволяет нажать текущую ветку, независимо от настроек.

Elad
источник

Ответы:

704

Согласно 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установить восходящую информацию отслеживания в локальной ветке, если вы еще не выдвинулись к источнику.

ceztko
источник
11
Я предпочитаю это вместо установки push.default простой или текущей, потому что разные машины могут иметь разные настройки. Вы можете привыкнуть git pushтолько к выталкиванию текущей ветви, но на других машинах вы можете случайно подтолкнуть все соответствующие ветви.
Висбуки
1
@wisbucky У меня есть несколько псевдонимов, в том числе co, поэтому, если я попытаюсь даже снять и затем проверить код без моего ~/.gitconfigфайла на этой виртуальной машине, я сразу узнаю об этом. Это позволяет мне чувствовать себя в безопасности при изменении значения толчка по умолчанию upstream.
Деймон
9
Интересно, что это не работает с просто @, что задокументировано как действительный псевдоним HEAD. (например git push -u origin @)
void.pointer
197

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

git config --global push.default current

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

git push 

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

Махеш
источник
Есть ли смысл добавлять push = refs/heads/current:refs/for/master/currentв «удаленный» раздел в .git / config? То есть «текущее» здесь особенное слово? Или это будет искать ветку под названием "текущий"?
Дэвид Дория
6
@DavidDoria 'current' не является названной здесь веткой.
Махеш
Лучше всего git push -u origin feature_branch_nameнастроить upstream / tracking! Если вы используете удаленный репозиторий по крайней мере.
Flo
40

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

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

git config --global push.default current

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

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

Я использую такой псевдоним в моем конфиге .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'
Theodor
источник
8

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

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

Райан Ребо
источник
6

Если вы используете 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
Фарук Сахин
источник
Спасибо, однако, в этом случае не будут ли ВСЕ отслеживающие ветви перемещены в источник?
Elad
Я изменил ответ, пожалуйста, смотрите ссылку, ответ там более полный.
Фарук Сахин
Опять же, проблема в том, что все ветви, которые являются отслеживающими ветвями, перемещаются таким образом. Как я уже писал в своем вопросе, ветвь в первую очередь является отслеживаемой ветвью, поэтому я думаю, что установка восходящей ветки, как вы предложили, является избыточной. Или я не прав?
23
Затем вы можете настроить git для отправки только текущей ветви, изменив поведение git push. git config --global push.default upstreamустановит поведение push для нажатия только текущей ветви.
Фарук Сахин
5

Самый простой способ: запустить 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
}
Райан Стюарт
источник
1

С помощью ответа 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
}

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

Bantak
источник