Eu não sou um mestre do git, mas trabalho com ele há algum tempo, com vários projetos diferentes. Em cada projeto, eu sempre git clone [repository]
e a partir desse ponto, sempre posso git pull
, desde que não tenha mudanças marcantes, é claro.
Recentemente, tive que reverter para uma ramificação anterior e fiz isso com git checkout 4f82a29
. Quando eu estava novamente pronto para puxar, descobri que tinha que voltar a dominar meu ramo. Agora, não posso puxar usando um straight, git pull
mas, em vez disso, tenho que especificar git pull origin master
, o que é chato, e indica para mim que não entendo completamente o que está acontecendo.
O que mudou que não me permite fazer uma sequência git pull
sem especificar o mestre de origem e como alterá-la novamente?
ATUALIZAR:
-bash-3.1$ cat config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[branch "master"]
[remote "origin"]
url = [email protected]:user/project.git
fetch = refs/heads/*:refs/remotes/origin/*
ATUALIZAÇÃO 2: Para ser claro, entendo que meu método original pode estar incorreto, mas preciso corrigir esse repositório para que possa simplesmente usá-lo git pull
novamente. Atualmente, o git pull resulta em:
-bash-3.1$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me either. Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull ').
See git-pull(1) for details on the refspec.
If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:
branch.master.remote =
branch.master.merge =
remote..url =
remote..fetch =
See git-config(1) for details.
Eu posso dizer git pull
qual ramificação mesclar e funciona corretamente, mas git pull
não funciona como antes do meu git checkout
.
fonte
Respostas:
Abaixo
[branch "master"]
, tente adicionar o seguinte ao arquivo de configuração Git do repositório (.git/config
):Isso diz ao Git 2 coisas:
git pull
na ramificação principal, sem controle remoto e ramificação especificados, use o controle remoto padrão (origem) e mescle as alterações na ramificação mestre remota.Mas não sei por que essa configuração foi removida da sua configuração. Você pode ter que seguir as sugestões que outras pessoas postaram também, mas isso pode funcionar (ou ajudar pelo menos).
Se você não quiser editar o arquivo de configuração manualmente, poderá usar a ferramenta de linha de comando:
fonte
.git/config
).$ git config branch.master.remote origin ; git config branch.master.merge refs/heads/master
.Se preferir, você pode definir essas opções através da linha de comando (em vez de editar o arquivo de configuração) da seguinte maneira:
Ou, se você é como eu, e deseja que esse seja o padrão em todos os seus projetos, incluindo aqueles em que você poderá trabalhar no futuro, adicione-o como uma configuração global:
fonte
.git
no qual o git parece manter o código hash domaster
commit atual de s.Isso adicionará as seguintes informações ao seu
config
arquivo:Se você tiver
branch.autosetuprebase = always
, ele também adicionará:fonte
fatal: Not a valid object name: 'origin/master'.
mesmo sendoorigin
um controle remoto válido emaster
existindo, como de costume, nos dois repositórios.git branch --set-upstream-to=origin/master master
.Acho que é difícil lembrar o exato
git config
ougit branch
argumentos como em mipadi de e Casey de respostas, então eu uso estes 2 comandos para adicionar a referência a montante:Isso adicionará as mesmas informações ao seu .git / config, mas acho mais fácil lembrar.
fonte
O Git pull combina duas ações - buscar novas confirmações do repositório remoto nas ramificações rastreadas e depois mesclá-las na ramificação atual .
Quando você efetuou o check-out de um commit específico, não possui uma ramificação atual, apenas o HEAD aponta para o último commit que você fez. Portanto
git pull
, não possui todos os seus parâmetros especificados. Por isso não funcionou.Com base nas informações atualizadas, o que você está tentando fazer é reverter seu repositório remoto. Se você conhece o commit que introduziu o bug, a maneira mais fácil de lidar com isso é com o
git revert
qual registra um novo commit que desfaz o commit especificado do buggy:Como é seu servidor que você deseja alterar, assumirei que você não precisa reescrever o histórico para ocultar a confirmação do buggy.
Se o bug foi introduzido em uma consolidação de mesclagem, esse procedimento não funcionará. Consulte Como reverter uma fusão com defeito .
fonte
Há também uma maneira de configurar o Git, para que ele sempre puxe e empurre a filial remota equivalente para a filial atualmente com check-out na cópia de trabalho. É chamado de ramo de rastreamento, que o git ready recomenda a configuração por padrão .
Para o próximo repositório acima do diretório de trabalho atual:
Para todos os repositórios Git, que não estão configurados de outra forma:
Tipo de mágica, IMHO, mas isso pode ajudar nos casos em que o ramo específico é sempre o ramo atual .
Quando você
branch.autosetupmerge
definetrue
e faz check-out de uma ramificação pela primeira vez, o Git informa sobre o rastreamento da ramificação remota correspondente:O Git irá empurrar automaticamente para o ramo correspondente automaticamente:
fonte
Não querendo editar meu arquivo de configuração do git, segui as informações no post do @ mipadi e usei:
fonte
Sua pergunta imediata sobre como fazê-lo funcionar, você precisa fazer o que diz. Especifique o refspec para obter na sua configuração de filial.
fonte
Só queria adicionar algumas informações que, podemos verificar essas informações se
git pull
referem automaticamente a qualquer ramo ou não.Se você executar o comando,
git remote show origin
(assumindo a origem como o nome abreviado para remoto), o git mostra essas informações, se existegit pull
ou não uma referência padrão .Abaixo está um exemplo de saída. (Extraído da documentação do git).
Observe a parte em que mostra, Filial local configurada para git pull.
Nesse caso,
git pull
se referirá agit pull origin master
Inicialmente, se você clonou o repositório, usando o git clone, essas coisas serão resolvidas automaticamente. Mas se você adicionou um controle remoto manualmente usando o git remote add, eles estão ausentes na configuração do git. Se for esse o caso, a parte em que mostra "Ramificação local configurada para 'git pull':" estaria ausente na saída de
git remote show origin
.As próximas etapas a seguir, se não houver configuração
git pull
, já foram explicadas por outras respostas.fonte