Pergunta

Recentemente asneira minha git repo e gostaria de saber se existe algum remédio para isso.

Minha configuração é a seguinte:

Central repo on github.
Personal repo on github (which is a fork of Central)
   +Central is setup as remote (upstream/master)
   +Master branch (origin/master)
   +Feature branch (origin/feature)

Meu trabalho era assim:

Need to fix something in Central:
   1. checkout Master
   2. Make changes
   3. Pull from upstream/master and merge
   3. Commit, push to upstream/master

Need to work on a New Feature:
   1. Checkout/Create Feature branch
   2. Work work work
   3. Pull from upstream/master and merge
   4. Commit, push to upstream/master

Desta forma, eu sempre tive um estado primitivo da Central no meu ramo Mestre.

Agora, o que eu fiz foi começar a trabalhar no ramo Mestre vez. Então eu fiz alterações ao meu mestre e não pode mais ramo dele para obter uma cópia do Central. Sempre que eu preciso fazer e empurrar algumas correções para Central, eu tenho que clonar o Central em outro diretório e trabalhar a partir daí.

A minha pergunta: Existe uma maneira de "reverter" o meu mestre para ser uma cópia idêntica do Central, enquanto se move todas as mudanças que eu fiz no meu Mestre em outro ramo (digamos Recurso)

?

Eu sei que é confuso, e eu gostaria de receber qualquer ajuda. Vou esclarecer se alguma coisa não está clara.

Foi útil?

Solução

Bem, a solução foi bastante simples, sugerido por Pat Notz e Bombe.

#Make sure we're on the master branch
$ git checkout master

# Make a new branch to hold the work I've done
$ git branch old_master
# Save this branch on my remote repo (for backup)
$ git checkout old_master
$ git push origin old_master

# Reset my local master back to match the commit just before I started 
# working on my new feature
$ git checkout master
$ git reset --hard 2aa93842342342
# Get it to be the same as my Central
$ git pull upstream master

# Now DELETE my master on my remote repo
$ git push origin :master
# And recreate it
$ git push origin master

# Branch created!
#* [new branch]      master -> master

#

Agora eu tenho dois ramos bonito: mestre e old_master. Com o mestre de ser uma cópia do meu Central, para correções para produção, e old_master segurando todo o trabalho que eu fiz anteriormente!

Obrigado!

Outras dicas

# Make sure we're on the master branch
$ git checkout master

# Make a new branch to hold the work I've done
$ git branch old_master

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

Agora você pode fazer o checkout old_master e usá-lo apenas como você fez o seu ramo feature

O que exatamente você quer dizer com

Eu errei [up] meu mestre e não pode mais ramo dela.

Você pode sempre criar um novo ramo de qualquer cometer em seu repositório, não importa como “confuso”, pode ser-que por sinal é algo Git não tem noção de.

Basicamente, você pode reverter seu repositório a qualquer estado que anteriormente tinha porque Git não vai explicitamente excluir quaisquer objetos, ele só irá coleta de lixo não referenciados (pendurado) objetos de vez em quando. Então você só precisa descobrir o que seu repositório parecia. gitk ou git log pode ajudá-lo lá.

Depois de restaurado o seu repositório local para um estado que você gosta, você pode simplesmente empurrá-lo de volta ao seu repositório público central. Se isso resulta em um não-fast-forward empurrar pode ser necessário especificar o sinalizador --force ao empurrar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top