Como redefinir 'mestre' para 'origem / mestre'?


216

Posso fazer o seguinte de uma maneira mais simples?

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

Às vezes, isso pode ser feito sem tocar na árvore de trabalho: stackoverflow.com/a/12343727/586086
Andrew Mao

6
Atualize sua resposta aceita: @ A resposta do KindDragon é mais correta e mais curta.
Robert Siemer

Respostas:


310

Como a resposta do KindDragon menciona, você pode recriar diretamente em :masterorigin/master

git checkout -B master origin/master

A git checkoutpágina do manual menciona:

Se -Bfor dado, <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.


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

94

O Git suporta este comando:

git checkout -B master origin/master

Confira o origin/masterramo e redefina o masterramo lá.


4
A única resposta verdadeira.
Robert Siemer

3
salve quatro pressionamentos de tecla - você não precisa das aspas. Just: git checkout -B origem master / mestre
zumalifeguard

digamos que cometi 2 coisas, a primeira é uma mesclagem com branch e a segunda é regular. O que acontece com a mesclagem se eu voltar à origem / mestre?
Utdev 22/12

11
você não precisa git fetch origin masterantes para ter certeza de que origin/masterestá atualizado?
31817 pedrozath

Sim, claro com todas as soluções que você deve fazer git fetchprimeiro
KindDragon

29

Eu acho que até a resposta do VonC tem complexidade em comparação com esta opção:

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

O git registra automaticamente todos os valores de uma ref (através do reflog). Portanto, depois de executar esse comando, master@{1}refere-se ao valor anterior de master.

A resposta do VonC está correta, mas desperdiça tempo de checkout do valor antigo de master no sistema de arquivos.

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


11
Parece uma alternativa interessante. +1
VonC 19/03/2013

Eu ainda receboAlready on 'master'
yourfriendzak

@yourfriendzak, esqueci-me de levar em consideração que você já deve ter feito o check-out do mestre antes de atualizar o master. Atualizei a resposta para que ela funcione também nesse caso.
22613 Alexander Bird

Isso funciona mesmo se você não estiver no mestre (como um estado HEAD desanexado que está realmente apontando para a origem / mestre da dica). Em seguida, você pode fazer o checkout do mestre sem precisar percorrer os arquivos antigos no repositório. Ótimo!
Andrew Mao

20

Se você já masterestiver conectado, faça o seguinte:

git reset --hard origin/master

Ele apontará a masterramificação local para o controle remoto origin/mastere descartará quaisquer modificações no diretório de trabalho.


E irá excluir arquivos! Se você criou / editou arquivos e executou um "git add" neles, este comando os excluirá. Esteja avisado.
Cheeso

Essa abordagem é melhor do que git checkout -B master origin/master?
Jim Aho
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.