Eu estava acidentalmente trabalhando em um ramo que não deveria estar por um tempo, então eu o ramifiquei, dando o nome apropriado. Agora, quero sobrescrever o ramo que não deveria estar na versão de origem (github). Existe uma maneira fácil de fazer isso? Tentei excluir a ramificação e, em seguida, redefinir a ramificação de rastreamento, mas isso me dá a versão em que eu estava trabalhando novamente.
440
git switch -C mybranch origin/mybranch
. Veja minha resposta editada abaixoRespostas:
Se você ainda não enviou a origem, é possível redefinir sua ramificação para a ramificação upstream com:
(Certifique-se de referenciar seu último commit em um ramo separado, como você mencionou na sua pergunta)
Observe que logo após a redefinição,
mybranch@{1}
refere-se à confirmação antiga, antes da redefinição.Mas se você já fez o push, consulte " Criar ramificação git e reverta o original para o estado upstream " para outras opções.
Com Git 2,23 (agosto de 2019) , que seria um comando:
git switch
.Nomeadamente:
git switch -C mybranch origin/mybranch
Exemplo
Isso restaura o índice e a árvore de trabalho, como
git reset --hard
faria.Como comentado por Brad Herman , um
reset --hard
iria remover qualquer novo arquivo ou redefinir arquivo modificado para CABEÇA .Na verdade, para ter certeza de começar de uma "lista limpa", um
git clean -f -d
após a redefinição garantiria uma árvore de trabalho exatamente idêntica à ramificação para a qual você acabou de redefinir.Esta postagem do blog sugere esses aliases (
master
apenas para ramificação, mas você pode adaptá-los / estendê-los):fonte
git reset --hard origin/mybranch
comando várias vezes quando não me importei com nenhuma alteração local e só queria uma cópia limpa que correspondesse à origem. No entanto, hoje, isso não funcionou - eu ainda tinha um punhado de arquivos novos e sem etapas, e o git continuava me prometendo que estava no HEAD. A nota sobregit clean -f -d
isso corrigiu isso, limpando todos os novos arquivos que eu não queria.git reset --hard HEAD
para reverter para a submissão anterior, ignorando quaisquer alteraçõesSupondo que foi isso que aconteceu:
Então você percebe que faz alterações no ramo errado.
Mas
master
ainda aponta para o seu commit. Você quer que aponte para onde apontou antes.Solução
A maneira mais fácil é:
Outra maneira é:
Observe que o uso
reset --hard
fará com que suas alterações não confirmadas sejam perdidas (tests.py
no meu exemplo).fonte
Eu tenho um repositório particular em um servidor e regularmente o reencaminhao / force-push para ele, o que torna necessário redefinir a filial local no meu outro computador com frequência. Por isso, criei o seguinte apelido "catchup", que permite fazer isso para o ramo atual. Diferente da outra resposta, não há nome de filial codificado nesse alias.
Segure firme.
Formatado corretamente (não funcionará com as novas linhas em .gitconfig), fica assim:
\\033[0;33m
e\\033[0m
é para enfatizar a ramificação atual e a montante com cores.$(git symbolic-ref -q --short HEAD)
é o nome do ramo atual$(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD))
é o montante da ramificação atual.Como a redefinição é uma chamada potencialmente perigosa (especialmente com a opção --hard, você perderá as alterações não confirmadas), ela primeiro informa o que está prestes a fazer. Por exemplo, se você estiver no dev-container da filial com controle remoto chamado qcpp / dev-container e entrar
git catchup
, será solicitado:Se você digitar y ou apenas pressionar return, ele fará a redefinição. Se você inserir mais alguma coisa, a redefinição não será realizada.
Se você deseja ser super seguro e evitar programaticamente a perda de alterações não-encenadas / não confirmadas, pode usar o apelido acima ainda mais com as verificações de acordo com o índice diff .
A palavra obrigatória de aviso: se você estiver trabalhando em um repositório público em que outras pessoas se basearam no trabalho, e você precisar desse alias, estará fazendo algo errado ™ .
fonte
Eu tentei isso e ele não redefiniu minha ramificação atual para o meu github remoto mais recente. Pesquisei no Google e encontrei https://itsyndicate.org/blog/how-to-use-git-force-pull-properly/
o que sugeriu
Eu queria redefinir minha ramificação v8, então fiz
e funcionou
fonte