Questão Como faço para redefinir 'mestre' para 'origem / mestre'?


Posso fazer o seguinte de maneira mais simples?

git checkout origin/master
git branch -D master
git branch master
git checkout master

151


origem


Às vezes, isso pode ser feito sem tocar na árvore de trabalho: stackoverflow.com/a/12343727/586086 - Andrew Mao
Por favor, atualize sua resposta aceita: @ A resposta da KindDragon é mais rápida e rápida. - Robert Siemer


Respostas:


Como KindDragon's responda menciona, você pode recriar master diretamente em origin/master com:

git checkout -B master origin/master

o git checkout página man  menciona:

E se -B é dada, <new_branch> é criado se não existir; caso contrário, é redefinido. Este é o equivalente transacional de

$ git branch -f <branch> [<start point>]
$ git checkout <branch>

Originalmente sugerido:

Algo como:

$ git checkout master

# remember where the master was referencing to
$ git branch previous_master

# Reset master back to origin/master
$ git reset --hard origin/master

com o passo 2 sendo opcional.


209



Você pode fazer isso com uma linha. - Robert Siemer


O Git suporta este comando:

git checkout -B master origin/master

Confira a origin/master ramificar e, em seguida, redefinir master ramo lá.


69



A única verdadeira resposta. - Robert Siemer
salve quatro teclas - você não precisa das aspas. Apenas: git checkout -B master origem / master - zumalifeguard
digamos que eu tenha cometido 2 coisas, a primeira é uma mesclagem com a ramificação e a segunda é regular. O que acontece com a fusão se eu voltar para a origem / mestre? - utdev
você não precisa git fetch origin master antes para ter certeza origin/master é atualizada? - pedrozath
Sim, claro, com todas as soluções que você deve fazer git fetch primeiro - KindDragon


Acho que até a resposta da VonC tem complexidade em comparação com essa opção:

git update-ref refs/heads/master origin/master
git reset --hard master

git registra automaticamente todos os valores de um ref (através do reflog). Então, depois de executar esse comando, então master@{1} refere-se ao valor anterior do mestre.

A resposta da VonC está correta, mas o tempo gasto no checkout do antigo valor do master no sistema de arquivos é perdido.

Se você se importa com objetos órfãos no repositório, pode executar git gc


28



Soa uma alternativa interessante. +1 - VonC
Eu ainda recebo Already on 'master' - yourfriendzak
@yourfriendzak, esqueci-me de levar em conta que você já pode ter o check-out mestre antes de atualizar o mestre. Eu atualizei a resposta para ser uma que deve funcionar mesmo nesse caso também. - Alexander Bird
Isso funciona mesmo se você não estiver no master (como um estado HEAD desanexado que está realmente apontando para a origem / master do tip). Então, você pode fazer o checkout master sem ter que virar arquivos antigos pelo repo. Ótimo! - Andrew Mao


Se você já está em master você pode fazer o seguinte:

git reset --hard origin/master

Vai apontar o local master ramificar para o controle remoto origin/master e descartar quaisquer modificações no diretório de trabalho.


11



E vai deletar arquivos! Se você criou / editou arquivos e executou um "git add", este comando irá apagá-los. Esteja avisado. - Cheeso


Você já é o mestre. Você quer remover a origem remota assim git pull não faz nada. assim

git remote rm origin

Você pode adicionar o repositório atual como origem ao repositório remoto, se quiser.

NB: Se o local estiver à frente do controle remoto, sua solução apagará as alterações locais!


-1



Essa resposta não faz sentido. - ADTC
Isso é diretamente enganoso e pode prejudicar o projeto em que as pessoas estão trabalhando. - Wisienkas
Isto não está certo. Não sei por que você teve um upvote. - Saher Ahwal