Зачем мне явно нажимать новую ветку?

Я новичок в 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'.