Есть ли способ настроить это без указания ветки?
Как вы можете git вытащить только текущую ветку?
Ответы (6)
Git уже тянет только текущую ветку. Если у вас есть ветвь, настроенная как отслеживающая ветвь, вам не нужно указывать удаленную ветвь. git branch --set-upstream localbranch reponame/remotebranch установит отношения отслеживания. Затем вы выпускаете git pull [--rebase], и только эта ветвь будет обновлена.
Конечно, будут обновлены все ветки удаленного отслеживания и все ссылки для удаленного, но только ваша локальная ветка отслеживания будет изменена.
Полезный псевдоним Bash для сокращения ввода этой общей операции:
# Add an alias to pulling latest git changes into your same branch
alias pullhead='git pull origin $(git rev-parse --abbrev-ref HEAD)'
Функция Powershell, которая делает то же самое:
Function pullhead {
$cur_head="$(git rev-parse --abbrev-ref HEAD)"
& git pull origin ${cur_head}
}
git pull обновления чего-то, что вы обычно проверяете, и, используя это определение, вытягивается только одна ветвь.
- person Seth Robertson; 08.01.2019
Я просто сделал это так:
git pull origin "$(git branch | grep -E '^\* ' | sed 's/^\* //g')"
or
git pull origin $(git rev-parse --abbrev-ref HEAD)
Это извлекает текущую ветку из git branch и извлекает эту ветку из удаленного источника.
Обратите внимание, что, как сказал Сет Робертсон, когда аргументы не указаны, изменяется только текущая ветка, но извлекаются все удаленные ветки. Я не хочу получать все удаленные ветки, поэтому я сделал это так.
git branch на самом деле не следует анализировать информацию о ветке. Эта информация доступна, если git rev-parse выполнить команду: git pull origin $(git rev-parse --abbrev-ref HEAD)
- person Paul DelRe; 09.08.2016
git pull origin <current-branch>, которая в любом случае является значением по умолчанию, не так ли? Вы подразумеваете, что другие удаленные ветки (например, origin/other-branch и т. д.) не обновляются, чтобы уменьшить трафик?
- person Peter - Reinstate Monica; 19.09.2017
git pull, вы можете получить сообщение вроде There is no tracking information for the current branch. Please specify which branch you want to merge with.. Тогда вы всегда набираете git pull origin my-feature-branch. Я действительно хотел бы знать, как возникает эта ситуация, когда нет информации об отслеживании.
- person Alfe; 16.07.2018
git pull origin $(git branch --show-current), который легче запомнить.
- person RN Kushwaha; 18.08.2020
ОБНОВЛЕНИЕ
Старый ответ, который я добавил, больше не работает :/. Но после того, как я получил несколько положительных отзывов о версии PUSH, которую я разместил, для меня это означает, что этот ответ на самом деле помогает кому-то, кто пришел сюда из поисковых систем, поэтому я сохраню этот ответ.
Попробуйте это для новой версии git:
$ git config --global push.default current
pull.default=current. Я вижу, что мой git clone по умолчанию также добавил remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*, но это довольно стандартно.
- person Mort; 18.06.2015
pull.default. Помещение этого в вашу конфигурацию git ничего не даст.
- person David Sanders; 20.11.2015
Флаг --set-upstream устарел и будет удален. Следовательно, используйте --track или --set-upstream-to
Пример: если вы хотите установить информацию об отслеживании для этой ветки, вы можете сделать это с помощью:
git branch --set-upstream-to=<remote>/<branch> develop
--set-upstream-to= продолжает упоминаться git, когда он не знает о вашей информации об отслеживании. Без упоминания об устаревании.
- person Adrien; 03.04.2017
Да, есть конфиг, который можно изменить в .gitconfig, например:
[push]
default = current
который подтолкнет текущую ветку к обновлению ветки с тем же именем на принимающей стороне.
Проверить по:
git config --global --get push.default
См.: git-config.
git pull, а не git push, поэтому я понизил ваш ответ, чтобы люди не думали, что это решение.
- person Manse; 04.02.2021
Вот псевдоним git, который не предполагает, что удаленным является origin, и обрабатывает, если ветка не отслеживает удаленный.
pullh = "!f() { set -e; set -o pipefail; arr=($(git rev-parse --abbrev-ref @{u} | sed 's/\\//\\n/')); git pull ${arr[0]} ${arr[1]}; }; f"
(Отказ от ответственности: я очень новичок в bash, и вышеизложенное, вероятно, можно было бы сильно упростить.)