Я новичок git
и я тренируюсь. Я создал локальную ветку, но увидел, что когда я это сделал, git push
моя ветка не была загружена в репозиторий. Я должен был на самом деле: git push -u origin --all
.
Почему это? Разве ветвь не является новым изменением, которое будет добавлено по умолчанию? Зачем мне запускать вторую команду?
git
version-control
Кратил
источник
источник
push.default
см.man git-config
). Если вы это сделаетеgit config --add push.default current
, тоgit push
при необходимости автоматически создадут ветку в удаленном репо. Почему это не по умолчанию объясняется в ответах.current
' и 'upstream
' см. Мой старый ответ stackoverflow.com/a/13751847/6309 .Ответы:
Фактическая причина в том, что в новом репо (git init) нет веток (нет
master
, вообще нет веток, ноль веток)Поэтому, когда вы впервые подталкиваете к пустому репозиторию (обычно пустое ), у этого вышестоящего репо нет ветки с таким же именем.
И:
matching
' (push все ветви с одинаковыми именами, создавая их, если они не существуют),simple
' (push только текущая ветвь, и только если она имеет аналогично названную удаленную ветвь отслеживания в восходящем направлении, начиная с git 1.7.11 )В обоих случаях, поскольку обратное пустое хранилище не имеет ветки:
Это означает, что ваш местный первый толчок понятия не имеет:
Так что вам нужно хотя бы сделать:
Но если вы делаете только это, вы:
master
ветвь в вышестоящем (теперь непустом репо): хорошо.master
' должна быть отправлена в upstream (origin
) 'master
' (вышестоящая ветвь): плохо.Вот почему рекомендуется для первого нажатия:
Это будет записывать в
origin/master
качестве удаленного филиала отслеживания , и позволит следующий толчок автоматически нажатьmaster
наorigin/master
.И это тоже будет работать с политиками push
current
или 'upstream
'.В каждом случае, после начального
git push -u origin master
, простого нажатия git будет достаточно, чтобы продолжить отправку master в правую ветвь вверх по течению.источник
git push
также ожидает, что ветвь уже существует?simple
': push для любой записанной восходящей ветви, если эта восходящая ветвь имеет то же имя, что и локальная. Простогоgit push
будет достаточно.git push --set-upstream origin new_branch
илиgit push -u origin new_branch
для краткости. То,-all
что использовал спрашивающий, обошло наименование конкретной новой ветви, включив все ветви. Это покрыто + Klas Mellbourn в его ответе.Вы не видите ниже
Я нахожу эту «особенность» довольно раздражающей, так как я не пытаюсь запускать ракеты на Луну, просто нажмите на мою чертову ветку. Вы, вероятно, тоже, иначе вы не были бы здесь!
Вот исправление: если вы хотите, чтобы он неявно выдвигал текущую ветвь независимо от того, существует ли эта ветвь в источнике, просто выполните эту команду один раз, и вам больше никогда не придется нигде:
Так что если вы делаете ветки, как это:
а затем сделать некоторые коммиты, а затем сделать
вывести их в исходное положение (находясь в этой ветви), и он создаст указанную для вас ветку, если она не существует.
Обратите внимание, что бит -u гарантирует, что они связаны, если позже вы извлечете их из указанной ветви. Если вы не планируете тянуть ветку позже (или у вас все в порядке с другим лайнером, если вы это делаете) - u не требуется.
источник
git push -u
Вывод при
git push
нажатии на новую веткуПростое
git push
предполагает, что уже существует удаленная ветвь, которую отслеживает текущая локальная ветвь. Если такой удаленной ветви не существует, и вы хотите ее создать, вы должны указать это с помощью флага-u
(краткая форма--set-upstream
).Почему это так? Я предполагаю, что разработчики чувствовали, что создание ветки на удаленном компьютере является настолько важным действием, что это должно быть трудно сделать по ошибке.
git push
это то, что вы делаете все время."Разве ветвь не является новым изменением, которое будет добавлено по умолчанию?" Я бы сказал, что «изменение» в Git - это коммит. Ветвь - это указатель на коммит. Для меня имеет больше смысла думать о push как о чем-то, что подталкивает коммиты в другие репозитории. То, какие коммиты отправляются, определяется тем, в какой ветке вы находитесь, и отношениями отслеживания этой ветви к удаленным веткам.
Подробнее о отслеживании веток вы можете прочитать в главе «Удаленные ветки» книги Pro Git .
источник
fatal
но я уже сделал коммит в ветке. Это имеет значение?git push -u origin
скопировал его в удаленный репозиторий.fatal
сообщение, подобное тому, которое вы упомянули в ответе. Зависит ли это различие от того, что я передал что-то в ветку?fatal
сообщение. Я предполагаю, что разница зависит от того, какую именно реализацию git вы используете. Мой вывод из 1.8.1.msysgit.1 работает на Windows 8.Первоначальные разработчики не смогли быстро найти обоснование, но я могу дать вам обоснованное предположение, основанное на нескольких годах опыта работы с Git.
Нет, не каждая отрасль - это то, что вы хотите подтолкнуть во внешний мир. Это может быть частный эксперимент.
Кроме того, куда следует
git push
отправлять все филиалы? Git может работать с несколькими пультами, и вы можете захотеть иметь разные наборы веток на каждом. Например, центральный проект GitHub repo может иметь ветки релизов; ветка GitHub может иметь ветки тем для просмотра; и локальный сервер Git может иметь ветви, содержащие локальную конфигурацию. Еслиgit push
бы отодвинуть все ветви к удаленному, что отслеживает текущая ветка, такую схему было бы легко испортить.источник
It might represent a private experiment
Хорошо, но в чем дело? «Основная» ветка, в которой все работают, т.е.master
не затронута. Если вы не хотите скрыть исходный код 2)git push, without a remote, pushes to the current branch's remote
Я потерял вас здесь :(git fetch
каждый раз создавать сотни наполовину работающих ветвей. 2) Я имею в видуgit push
поведение по умолчанию. Это выдвигает к удаленному, что текущая ветвь отслеживает, если таковые имеются.HEAD - это сокращение от текущей ветви, поэтому git push -u origin HEAD работает. Теперь, чтобы избежать этой типизации каждый раз, когда я использую псевдоним:
git config --global alias.pp 'push -u origin HEAD'
После этого, каждый раз, когда я хочу отправить ветку, созданную через ветку git -b, я могу нажать ее, используя:
мерзавец пп
Надеюсь, это сэкономит время для кого-то!
источник
При первой проверке
Шаг 1:
git remote -v
// если найден git initialize, то удалить или пропустить шаг 2
Шаг 2:
git remote rm origin
// Затем настройте ваш адрес электронной почты глобально Git
Шаг 3:
git config --global user.email "youremail@example.com"
Шаг 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
источник
Я только что испытал дальнейшую перестановку этой проблемы.
У меня была названа ветка,
feat/XYZ-1234-some-description
потому что я работал над проблемой Jira 1234. Во время работы я создал новую проблему Jira, чтобы отследить небольшую часть работы, и когда я пришел, я решил нажать на название ветви с этим новым номером проблемы. в:Это дало мне ошибку, обсуждаемую в этой теме. Но поскольку я пытался перейти к другому имени ветви, отличному от текущего, моя проблема отличалась от описанной здесь. Я закончил тем, что переименовал свою местную ветку прежде, чем я мог нажать ее:
После того, как немного больше чтения вокруг , я понял , что я мог бы поставил
src
наgit push
, либо к текущему имени ветви, или только вHEAD
случае необходимости:источник
Если вы включаете, чтобы выталкивать новые изменения из вашей новой ветки в первый раз. И получаю ниже ошибку:
Чтобы протолкнуть текущую ветку и установить пульт в качестве восходящего, используйте
источник