Зачем мне явно нажимать новую ветку?
Я новичок в git
, и я практикую. Я создал локальную ветвь, но я увидел, что когда я сделал git push
, моя ветка не была загружена в репозиторий. Я должен был сделать: git push -u origin --all
.
Почему это? Не является ли веткой новое изменение, которое должно быть нажато по умолчанию? Зачем мне нужно выполнить вторую команду?
Ответы
Ответ 1
Фактическая причина заключается в том, что в новом репо (git init) там нет ветки (нет master
, вообще никакой ветки, нулевых ветвей)
Итак, когда вы нажимаете первый раз на пустой upstream repo (обычно голый один), что восходящее репо не имеет ветки с тем же именем.
и
В обоих случаях, поскольку исходное пустое репо не имеет ветки:
- пока нет соответствующей именованной ветки
- нет ветки восходящего потока вообще (с или без того же имени! Отслеживание или нет)
Это означает, что ваш локальный первый толчок не имеет понятия:
- куда нажать
- то, что нужно нажать (поскольку он не может найти ни одну восходящую ветвь, которая либо записывается как удаленная ветвь отслеживания, и/или имеет одно и то же имя)
Итак, вам нужно хотя бы сделать:
git push origin master
Но если вы это сделаете, вы:
- создаст ветвь upstream
master
на восходящем (теперь непустое репо): хорошо.
- не будет записывать, что локальная ветвь "
master
" должна быть нажата вверх по течению (origin
) 'master
' (восходящая ветка): плохо.
Вот почему для первого нажатия рекомендуется сделать:
git push -u origin master
Это будет записывать origin/master
в качестве ветки удаленной отслеживания и будет активировать следующий push для автоматического нажатия master
на origin/master
.
git checkout master
git push
И это тоже будет работать с политиками push 'current
' или 'upstream
'.
В каждом случае, после начального git push -u origin master
, простого нажатия git будет достаточно, чтобы продолжить толкать мастер в нужную ветвь вверх.
Ответ 2
Вы этого не сделаете, см. Ниже
Я нахожу эту "особенность" довольно раздражающей, так как я не пытаюсь запускать ракеты на Луну, просто надавите на мою проклятую ветку. Вы, наверное, тоже тоже, иначе вас здесь не будет!
Вот исправление: если вы хотите, чтобы он неявно нажал на текущую ветку, независимо от того, существует ли эта ветвь по происхождению, просто выполните эту команду один раз, и вам больше никогда не придется больше искать:
git config --global push.default current
Поэтому, если вы создадите такие ветки:
git checkout -b my-new-branch
а затем совершите некоторые коммиты, а затем выполните
git push -u
чтобы вывести их из источника (находясь на этой ветке), и он создаст для вас ветку, если она не существует.
Обратите внимание, что бит -u гарантирует, что они связаны, если вы должны были уйти позже от указанной ветки. Если у вас нет планов потянуть ветку позже (или вы с другим лайнером, если вы это сделаете) -u не требуется.
Ответ 3
Вывод git push
при нажатии новой ветки
> git checkout -b new_branch
Switched to a new branch 'new_branch'
> git push
fatal: The current branch new_branch has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin new_branch
Простой git push
предполагает, что уже существует удаленная ветвь, которую отслеживает текущая локальная ветвь. Если такой удаленной ветки нет и вы хотите ее создать, вы должны указать это, используя флаг -u
(короткая форма --set-upstream
).
Почему это так? Я предполагаю, что разработчики почувствовали, что создание ветки на пульте является таким важным действием, что это должно быть трудно сделать по ошибке. git push
- это то, что вы делаете все время.
"Разве нет ветки, которую нужно изменить по умолчанию?" Я бы сказал, что "изменение" в Git является фиксацией. Ветвь является указателем на фиксацию. Для меня имеет смысл думать о толчке как то, что толкает, переписывается на другие репозитории. Какие коммиты толкаются, определяется тем, в какой ветки вы находитесь, и отношением отслеживания этой ветки к ветвям на пульте дистанционного управления.
Подробнее о ветвях отслеживания можно узнать в главе Удаленные ветки в книге Pro Git.
Ответ 4
Я не мог найти логическое обоснование для оригинальных разработчиков, но я могу дать вам обоснованное предположение, основанное на нескольких годах опыта Git.
Нет, не каждая ветвь - это то, что вы хотите продвигать во внешний мир. Это может представлять частный эксперимент.
Кроме того, где должно git push
отправлять все ветки? Git может работать с несколькими пультами, и вы можете иметь разные наборы ветвей на каждом. Например. центральный проект GitHub repo может иметь ветки выпуска; у вилки GitHub могут быть темы для просмотра; и локальный сервер Git может иметь ветки, содержащие локальную конфигурацию. Если git push
будет толкать все ветки на удаленный пульт, чтобы отслеживать текущую ветку, такую схему легко будет испортить.
Ответ 5
Головка короткая для текущей ветки, поэтому git push -u origin HEAD работает. Теперь, чтобы избежать этой типизации каждый раз, я использую псевдоним:
git config - global alias.pp 'push -u origin HEAD'
После этого каждый раз, когда я хочу нажать ветвь, созданную с помощью ветки git -b, я могу нажать ее, используя:
git pp
Надеюсь, это сэкономит время для кого-то!
Ответ 6
Сначала проверьте
Шаг 1: git remote -v
//если найдено git initialize, то удалите или пропустите шаг 2
Шаг 2: git remote rm origin
//Затем настройте свой адрес электронной почты глобально git
Шаг 3: git config --global user.email "[email protected]"
Шаг 4: git initial
Шаг 5: git commit -m "Initial Project"
// Если уже добавить репо проекта, пропустите шаг 6
Шаг 6: git remote add origin %repo link from bitbucket.org%
Шаг 7: git push -u origin master
Ответ 7
Если вы включаете, чтобы выталкивать новые изменения из вашей новой ветки в первый раз.
И ошибка ниже:
*git push -f
fatal: The current branch Coding_Preparation has no upstream branch.
Чтобы протолкнуть текущую ветвь и установить пульт в качестве восходящего, используйте
git push -u origin new_branch_name
** Successful Result:**
git push -u origin Coding_Preparation
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 599 bytes | 599.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'Coding_Preparation' on GitHub by visiting: ...
* [new branch] Coding_Preparation -> Coding_Preparation
Branch 'Coding_Preparation' set up to track remote branch 'Coding_Preparation' from 'origin'.