Я создаю новую ветку в Git:
git branch my_branch
Нажмите это:
git push origin my_branch
Теперь скажите, что кто-то сделал некоторые изменения на сервере, и я хочу вытащить origin/my_branch
. Я делаю:
git pull
Но я получаю:
You asked me to pull without telling me which branch you
want to merge with, and 'branch.my_branch.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.
If you often merge with the same branch, you may want to
use something like the following in your configuration file:
[branch "my_branch"]
remote = <nickname>
merge = <remote-ref>
[remote "<nickname>"]
url = <url>
fetch = <refspec>
See git-config(1) for details.
Я узнал, что могу заставить его работать с:
git branch --set-upstream my_branch origin/my_branch
Но зачем мне это делать для каждой создаваемой мной ветки? Разве не очевидно , что если я нажимаю my_branch
на origin/my_branch
, то я хотел бы, чтобы тянуть origin/my_branch
в my_branch
? Как я могу сделать это поведение по умолчанию?
git
git-branch
Рам Рахум
источник
источник
branch.autosetupmerge
означает, что восходящая конфигурация для новой ветви устанавливается только автоматически при создании ветви из ветви удаленного отслеживания (например<remote-name>/<branch-name>
) (см. Git-config (1) ). Вы, вероятно, создаете свои филиалы из существующих локальных филиалов. Если вы эффективно разветвляетесь прямо из кончика удаленной ветки (несмотря на то, что находитесь в локальной ветке), то вы можете использоватьgit branch my_branch <remote-name>/<branch-name>
для автоматической настройки исходной конфигурации.--set-upstream
вариант устарел. Вы должны использовать--track
или--set-upstream-to
вместо.--set-upstream
это устарело, то, возможно, разработчики git должны удалить его из справочного сообщения, которое отображается, когда вы запускаетеgit push
без параметров и не установлен апстрим?git branch --set-upstream
устарела.git push --set-upstream
не является.Ответы:
Ярлык, который не зависит от запоминания синтаксиса для
git branch --set-upstream
1 , должен сделать:... в первый раз, когда вы нажимаете эту ветку. Или, чтобы перейти к текущей ветви к ветви с тем же именем (удобно для псевдонима):
Вам нужно использовать
-u
только один раз, и это устанавливает связь между вашей веткой и филиалом такorigin
же, как этоgit branch --set-upstream
делается.Лично я думаю, что было бы хорошо установить эту связь между вашей веткой и одной удаленно. Обидно, что правила для
git push
и разныеgit pull
.1 Это может звучать глупо, но я очень часто забываю указывать текущую ветку, предполагая, что это по умолчанию - это не так, и результаты являются наиболее запутанными :)
Обновление 2012-10-11 : Видимо, я не единственный, кому легко ошибиться! Спасибо VonC за указание, что git 1.8.0 представляет более очевидное
git branch --set-upstream-to
, что может быть использовано следующим образом, если вы находитесь на веткеmy_branch
:... или с короткой опцией:
Это изменение и его обоснование описаны в примечаниях к выпуску git 1.8.0, кандидат на выпуск 1 :
источник
-u
первом нажатии, вы можете снова запустить push с этим флагом, и он начнет отслеживание.alias gpo="git push --set-upstream origin $(git branch | awk '/^\* / { print $2 }')"
Вы можете сделать это с меньшим количеством печати. Во-первых, измените способ работы push:
Это будет выводить
origin my_branch
часть, таким образом, вы можете сделать:Который будет создавать удаленную ветку с тем же именем и отслеживать ее.
источник
origin
работатьgit push -u
для вновь созданной ветви во вновь созданном репозитории? Предполагается ли, что репозиторий был клонирован, поэтому текущая ветвь имеет свой удаленный наборorigin
?pull
вам придется указать, откуда. В-u
устанавливает отслеживание ветви между происхождением и вашим местными репо.push
что лишает смысла весь этот вопрос. Короче говоря, нет хорошего ответа. То, что разработчики Git настаивают на сохранении этого опыта Awkward User eXperience (AUX) перед лицом инакомыслия широко распространенного сообщества, ... поучительно. И обескураживает. (Главным образом обескураживающий.)Вы можете просто
на первом месте. Если вы установите
branch.autosetupmerge
илиbranch.autosetuprebase
(мой любимый) вalways
(по умолчаниюtrue
),my-branch
будет автоматически отслеживатьorigin/whatever
.См
git help config
.источник
git checkout -t origin/whatever
, который также выбираетwhatever
в качестве нового филиала имя. Очень удобно!-u
/--set-upstream
.git checkout -t origin/whatever
у меня не работает при попытке создать новую ветку:fatal: Cannot update paths and switch to branch 'whatever' at the same time.
git checkout -b my-branch origin/whatever
также имеет ту же ошибку (я пытаюсь создать новую ветку, которая не существует на локальном или удаленном):fatal: Cannot update paths and switch to branch 'whatever' at the same time.
Это мое самое распространенное использование для The Fuck .
Кроме того, весело вводить ругательства в вашем терминале.
источник
Вы можете настроить upstream проще двумя способами. Сначала при создании ветки:
или после того, как вы создали ветку, вы можете использовать эту команду.
Вы также можете разветвляться, проверять и устанавливать upstream с помощью одной команды:
Лично я предпочитаю делать это в два этапа:
источник
git branch -u origin/my-branch
я могу бежать,git pull
чтобы сбросить свои изменения.git checkout -t origin/my-branch
без-b my-branch
, он просто автоматически выведетmy-branch
имя локальной ветви. Однако, как упомянул @Spongman, эта команда не работает, еслиorigin/my-branch
она не существует первой.git push -u origin/my-branch
терпит неудачу для меня сfatal: 'origin/my-branch' does not appear to be a git repository
. Это работает:git push -u origin my-branch
Ты можешь использовать:
которая будет связывать ветку upstream каждый раз, когда вы создаете или извлекаете новую ветку.
См. Https://felipec.wordpress.com/2013/09/01/advanced-git-concepts-the-upstream-tracking-branch/
Это также работает
branch.autosetuprebase
, если вы следуете более ориентированному на перебазирование рабочему процессу, но не используете его, если не знаете, что делаете, поскольку по умолчанию ваше поведение извлечения перебазируется, что может привести к странным результатам.источник
--set-upstream
сообщениеmaster
. 2. Бегиgit checkout -b new_branch
. 3. Добавьте коммит в эту ветку. 4git push origin new_branch
.. Это подталкивает коммит кmaster
ветви на источнике (а не к новой ветке с именем originnew_branch
).Кстати, ярлык для отправки текущей ветки на удаленный компьютер с таким же именем:
источник
Я лично использую следующие псевдонимы в Bash
в файле ~ / .gitconfig
и в файле ~ / .bashrc или ~ / .zshrc
источник
git pushup
которая всегда выталкивает текущую ветвь к источнику. Я всегда могу просто использоватьgit pushup
вместоgit push
👍Если ниже не работает:
Вам также следует обновить локальную конфигурацию вашего проекта, так как возможно ваш проект имеет локальные конфигурации git:
источник
Вы также можете явно указать git pull, какую удаленную ветку извлекать (как это упоминается в сообщении об ошибке):
git pull <remote-name> <remote-branch>
Однако будьте осторожны с этим: если вы находитесь в другой ветке и выполняете явное извлечение, ссылка, которую вы извлекаете, будет объединена с ветвью, в которой вы находитесь!
источник
Для чего стоит, если вы пытаетесь отследить ветку, которая уже существует на удаленном компьютере (например, origin / somebranch), но еще не проверила ее локально, вы можете сделать:
Примечание: «-t» - это сокращенная версия опции «--track».
Это создает ту же ассоциацию сразу.
источник
git checkout somebranch
эквивалентно.git fetch
сразу?git fetch
илиgit pull
. Я никогда не считал это проблемой.источник
Я использую этот псевдоним Git вместо копирования / вставки предложения из Git каждый раз: https://gist.github.com/ekilah/88a880c84a50b73bd306
Источник скопирован ниже (добавьте это в ваш
~/.gitconfig
файл):источник
Вы можете установить действительно хороший псевдоним, который может справиться с этим без слишком подробного синтаксиса.
У меня есть следующий псевдоним в
~/.gitconfig
:Сделав коммит в новой ветке, вы можете нажать новую ветку, просто набрав команду:
источник
po
?push origin
? что произойдет, если это выполняется несколько раз?git push -f
псевдонимgit pf
, так что я использую его, как только источник уже выдвинут.HEAD
Для тех, кто ищет псевдоним, с которым
git pull
я работаю, вот что я использую:Теперь, когда вы получаете:
Просто беги:
И ты хорош идти
источник
Потому что git обладает отличной способностью вставлять / извлекать разные ветки в разные «исходящие» репозитории. Вы можете даже использовать отдельные репозитории для толкания и вытягивания - в одной и той же ветке. Это может создать распределенный многоуровневый поток, и я вижу, что это полезно в таких проектах, как ядро Linux. Git был изначально построен для использования в этом проекте.
Как следствие, это не делает предположения о том, какое хранилище должно отслеживать ваше отделение.
С другой стороны, большинство людей не используют git таким образом, так что это может быть хорошим вариантом для варианта по умолчанию.
Git, как правило, довольно низкоуровневый, и это может разочаровать. Тем не менее, есть GUI, и должно быть легко писать вспомогательные скрипты, если вы все еще хотите использовать его из оболочки.
источник
Вы также можете сделать
git push -u origin $(current_branch)
источник
Я вроде заново обнаружил
legit
из-за этой проблемы (только OS X). Теперь все, что я использую при ветвлении, это две команды:legit publish [<branch>]
Публикует указанную ветку на удаленной. (псевдоним:pub
)legit unpublish <branch>
Удаляет указанную ветку с пульта. (псевдоним:unp
)SublimeGit поставляется с
legit
поддержкой по умолчанию, что делает всю процедуру ветвления такой же простой, как нажатие Ctrl-b.источник
Мы используем фабрикатор и не используем git. Мне пришлось создать псевдоним bash, который работает на Linux / Mac
спасти
источник
Вот псевдоним bash для git push, который безопасно запускать для каждого push и будет автоматически переключаться между настройкой upstream для первого push и затем выполнением обычных push после этого.
Оригинальный пост
источник