Aparentemente, sou péssimo em usar o git, apesar das minhas melhores tentativas de entender.
Do kernel.org para git push
:
-você
--set-upstream
Para cada ramificação atualizada ou enviada com êxito, adicione uma referência upstream (rastreamento), usada pelo git-pull (1) sem argumentos e outros comandos. Para mais informações, consulte
branch.<name>.merge
git-config (1).
Aqui está branch.<name>.merge
de git config
:
branch.<name>.merge
Define, juntamente com
branch.<name>.remote
, a ramificação upstream para a ramificação especificada. Ele informa ao git fetch / git pull qual ramificação será mesclada e também pode afetar o git push (consulte push.default). Quando na ramificação<name>
, ele informa ao git buscar o refspec padrão a ser marcado para mesclar em FETCH_HEAD. O valor é tratado como a parte remota de um refspec e deve corresponder a um ref que é buscado no controle remoto fornecido por"branch.<name>.remote"
. As informações de mesclagem são usadas pelo git pull (que primeiro chama git fetch) para procurar a ramificação padrão para mesclagem. Sem essa opção, os padrões git pull para mesclar o primeiro refspec buscado. Especifique vários valores para obter uma mesclagem de polvo. Se você deseja configurar o git pull para que ele seja mesclado a<name>
partir de outra ramificação no repositório local, você pode apontarbranch.<name>.merge
para o ramo desejado e use a configuração especial. (um período) parabranch.<name>.remote
.
Configurei com êxito um repositório remoto com o github e enviei com êxito o meu primeiro commit para:
git push -u origin master
Em seguida, involuntariamente, com sucesso, enviei meu segundo commit para meu repositório remoto usando:
git commit -m '[...]'
No entanto, pensando incorretamente que eu precisaria pressionar novamente para origin
partir master
, executei:
# note: no -u
git push origin master
O que isso fez? Não parecia ter nenhum efeito. Eu "desfiz" git push -u origin master
?
I'm apparently terrible at using git, despite my best attempts to understand it.
- Nunca alguém me recriou tão bem.Respostas:
A chave é "git-pull sem argumento". Quando você faz um
git pull
de uma ramificação, sem especificar um remoto ou ramificação de origem, o git analisa abranch.<name>.merge
configuração para saber de onde extrair.git push -u
define essas informações para o ramo que você está enviando.Para ver a diferença, vamos usar um novo ramo vazio:
Primeiro, empurramos sem
-u
:Agora, se adicionarmos
-u
:Observe que as informações de rastreamento foram configuradas para que
git pull
funcionem conforme o esperado sem especificar o controle remoto ou a ramificação.Atualização: dicas de bônus:
git pull
dessa configuração, também afeta o comportamento padrão degit push
. Se você tem o hábito de usar-u
para capturar a ramificação remota que pretende rastrear, recomendo definir seupush.default
valor de configuração comoupstream
.git push -u <remote> HEAD
empurrará a ramificação atual para uma ramificação com o mesmo nome<remote>
(e também configurará o rastreamento para que você possagit push
isso depois).fonte
git push <remote> <branch>
torna as coisas inequívocas . Se você deixar o controle remoto ou o ramo, o git retornará às definições de configuração do ramo, definidas para vocêgit push -u
.git push origin test
(o que não tem-u
). Você então mostrou quegit push -u origin test
remove a ambiguidade. Existe um erro de digitação ou estou apenas sendo denso novamente?git push <remote> <branch>
é inequívoco, quero dizer o relativo aogit push
qual depende da configuração do ramo. Da mesma forma,git pull <remote> <branch>
é inequívoco egit pull
depende da configuração da ramificação. Depois de pressionar-u
, ambosgit push
egit pull
funcionarão conforme o esperado.git push
- a menos que vocêpush.default
se defina ,git push
usa apenas a configuração de filial upstream para decidir para qual controle remoto enviar, e não a filial remota a ser atualizada.git push origin master
a mesma para o outro lado do IE.git pull origin master
.. Então, se suponha mudança de ramificação, você podegit push origin branch_name
e o mesmo no outro lado do IE.git pull origin branch_name
… é o mesmo que:
Faça a última declaração, se você esquecer o
-u
!Ou você pode forçá-lo:
Se você deixar o comando fazer isso por você, ele detectará seus erros, como se você digitasse um ramo inexistente ou não
git remote add
; embora isso possa ser o que você deseja. :)fonte
master
é apenas um exemplo :)git branch master -u origin/master
detalhes @ stackoverflow.com/a/2286030/790359-u
opção, digitegit push -u
imediatamente.--setup-upstream
será preterido: #The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to
git branch --set-upstream-to=origin/master master
Em termos mais simples:
Tecnicamente, o
-u
sinalizador adiciona uma referência de rastreamento ao servidor upstream para o qual você está enviando.O importante aqui é que isso permite que você faça um
git pull
sem fornecer mais argumentos. Por exemplo, depois de fazer umgit push -u origin master
, você pode ligar mais tardegit pull
e o git saberá que você realmente quis dizergit pull origin master
.Caso contrário, você teria que digitar todo o comando.
fonte
-u
sinalizador paraorgin master
cada próximo pull, ele se referirá a ele. E se eu quiser mudar ogit pull
comportamento, devo executargit push -u origin some_other_branch
egit pull
agora vou me referirsome_other_branch
? Obrigado!git push -u origin master
Todos os comandos necessários do git bash para empurrar e puxar para o Github:
Se você deseja editar um arquivo, então:
Para ver todas as ramificações e seus commits:
fonte