Eu sou novo em git
e estou praticando. Criei uma ramificação local, mas vi que, quando o fiz, git push
minha ramificação não foi carregada no repositório. Eu tinha que realmente fazer: git push -u origin --all
.
Por que é isso? Uma ramificação não é uma nova alteração a ser enviada por padrão? Por que preciso executar o segundo comando?
git
version-control
Cratylus
fonte
fonte
push.default
, consulteman git-config
). Se você o fizergit config --add push.default current
,git push
criará automaticamente a ramificação no repositório remoto, se necessário. Por que esse não é o padrão, é explicado nas respostas.current
' e 'upstream
', consulte minha resposta mais antiga stackoverflow.com/a/13751847/6309 .Respostas:
O motivo real é que, em um novo repositório (git init), não há ramificação (não
master
, nenhuma ramificação, zero ramificação)Então, quando você está empurrando pela primeira vez a um vazio repo a montante (geralmente um um nu ), que repo montante tem nenhum ramo de mesmo nome.
E:
matching
' (envie todos os ramos com o mesmo nome, criando-os se eles não existirem),simple
' (envie apenas o ramo atual e somente se ele tiver um ramo de rastreamento remoto com nome semelhante no upstream, desde o git 1.7.11 )Nos dois casos, como o repositório vazio a montante não tem ramificação:
Isso significa que seu primeiro impulso local não tem idéia:
Então você precisa pelo menos fazer um:
Mas se você fizer apenas isso, você:
master
ramo upstream no upstream (agora repositório não vazio): good.master
' precisa ser enviada para upstream (origin
) 'master
' (ramificação upstream): incorreta.É por isso que é recomendado, para o primeiro envio, fazer um:
Isso será gravado
origin/master
como um ramo de rastreamento remoto e permitirá que o próximo envio seja enviado automaticamentemaster
paraorigin/master
.E isso também funcionará com políticas push '
current
' ou 'upstream
'.Em cada caso, após o inicial
git push -u origin master
, um simples empurrão git será suficiente para continuar empurrando o mestre para o ramo direito a montante.fonte
git push
também espera que o ramo já exista?simple
': envio para qualquer ramo upstream registrado, se esse ramo upstream tiver o mesmo nome que o local. Um simplesgit push
será suficiente.git push --set-upstream origin new_branch
ougit push -u origin new_branch
abreviar. O-all
que o questionador usou ignorou a nomeação de um novo ramo específico, incluindo todos os ramos. Isso é coberto por + Klas Mellbourn em sua resposta.Você não vê, abaixo
Acho esse 'recurso' bastante irritante, já que não estou tentando lançar foguetes para a lua, apenas empurre meu maldito ramo. Você provavelmente também, ou não estaria aqui!
Aqui está a correção: se você deseja enviar implicitamente para o ramo atual, independentemente de esse ramo existir na origem, emita este comando apenas uma vez e você nunca precisará novamente em nenhum lugar:
Então, se você criar galhos assim:
e então faça alguns commit e então faça um
para tirá-los da origem (estando nesse ramo) e criará o referido ramo para você, se não existir.
Observe que o bit -u garante que eles estejam vinculados se você puxar posteriormente do referido ramo. Se você não planeja puxar a ramificação mais tarde (ou está de acordo com outra linha, se o fizer) -u não é necessário.
fonte
git push -u
Saída de
git push
ao empurrar uma nova ramificaçãoUm simples
git push
assume que já existe uma filial remota que a filial local atual está rastreando. Se não existir uma ramificação remota e você desejar criá-la, deverá especificar isso usando o sinalizador-u
(formato abreviado de--set-upstream
).Por que é assim? Eu acho que os implementadores acharam que criar uma ramificação no controle remoto é uma ação tão importante que deve ser difícil fazê-lo por engano.
git push
é algo que você faz o tempo todo."Uma ramificação não é uma nova alteração a ser enviada por padrão?" Eu diria que "uma mudança" no Git é um commit. Uma ramificação é um ponteiro para uma confirmação. Para mim, faz mais sentido pensar em um push como algo que empurra os outros repositórios. Quais confirmações são enviadas por push são determinadas por qual filial você está e o relacionamento de rastreamento dessa ramificação para ramificações no controle remoto.
Você pode ler mais sobre o rastreamento de ramificações no capítulo Ramificações remotas do livro Pro Git .
fonte
fatal
mas já havia feito um commit no branch. Isso importa?git push -u origin
copiou para o repositório remoto.fatal
mensagem como a mencionada na resposta. Essa diferença depende do fato de eu ter comprometido algo com o ramo?fatal
mensagem. Eu acho que a diferença depende exatamente de qual implementação git você está usando. Minha saída é de 1.8.1.msysgit.1 em execução no Windows 8.Não consegui encontrar uma justificativa dos desenvolvedores originais tão rapidamente, mas posso dar um palpite com base em alguns anos de experiência no Git.
Não, nem todo ramo é algo que você deseja enviar para o mundo exterior. Pode representar um experimento particular.
Além disso, para onde
git push
enviar todas as filiais? O Git pode funcionar com vários controles remotos e você pode querer ter diferentes conjuntos de ramificações em cada um. Por exemplo, um repositório central do projeto GitHub pode ter ramificações de lançamento; um fork do GitHub pode ter ramificações de tópicos para revisão; e um servidor Git local pode ter ramificações contendo configuração local. Segit push
empurrar todas as ramificações para o controle remoto que a ramificação atual rastreia, seria fácil estragar esse tipo de esquema.fonte
It might represent a private experiment
.Ok, mas qual é o grande problema? O ramo "principal" em que todos estão trabalhando, oumaster
seja, não é afetado. A menos que você queira manter o código-fonte oculto 2)git push, without a remote, pushes to the current branch's remote
Eu te perdi aqui :(git fetch
centenas de filiais semilaboradas o tempo todo. 2) Estou me referindo aogit push
comportamento padrão do. Ele envia ao controle remoto que a filial atual está rastreando, se houver.HEAD é a abreviação do ramo atual, portanto o git push -u origin HEAD funciona. Agora, para evitar essa digitação toda vez que eu usar o alias:
git config --global alias.pp 'push -u origin HEAD'
Depois disso, toda vez que eu quiser enviar por ramificação criada via git -b branch, posso enviá-la usando:
git pp
Espero que isso economize tempo para alguém!
fonte
Na primeira verificação
Etapa 1:
git remote -v
// se o git encontrado for inicializado, remova ou pule a etapa 2
Etapa 2:
git remote rm origin
// Em seguida, configure seu endereço de email globalmente git
Etapa 3:
git config --global user.email "[email protected]"
Passo 4:
git initial
Etapa 5:
git commit -m "Initial Project"
// Se já adicionar repositório de projeto, pule a etapa 6
Etapa 6:
git remote add origin %repo link from bitbucket.org%
Etapa 7:
git push -u origin master
fonte
Acabei de experimentar uma permutação adicional desse problema.
Eu tinha um ramo chamado
feat/XYZ-1234-some-description
porque estava trabalhando na edição 1234 do Jira. Durante o trabalho, criei um novo problema no Jira para rastrear um trabalho menor e, quando cheguei ao push, decidi usar o nome do ramo com esse novo número de problema. no:Isso me deu o erro que está sendo discutido neste segmento SO. Mas como eu estava tentando passar para um nome de filial diferente da minha filial atual, meu problema era diferente do descrito aqui. Acabei renomeando minha filial local antes de poder enviá-la:
Depois de ler um pouco mais, percebi que poderia ter definido um
src
nogit push
nome do ramo atual ou apenasHEAD
se apropriado:fonte
Se você habilitar o envio de novas alterações de sua nova filial pela primeira vez. E ficando abaixo do erro:
Para enviar a ramificação atual e definir o controle remoto como upstream, use
fonte