Eu estava trabalhando em um ramo git e estava pronto para confirmar minhas alterações, então fiz um commit com uma mensagem útil de commit. Então, distraidamente, fiz pequenas alterações no código que não valem a pena ser mantidas. Agora eu quero mudar de ramo, mas o git me dá,
erro: você tem alterações locais para "X"; não pode mudar de ramificação.
Posso mudar de agência sem confirmar? Se sim, como posso configurar isso? Caso contrário, como saio desse problema? Quero ignorar as pequenas alterações sem confirmar e apenas alterar os ramos.
git
branch
git-checkout
Daniel Farrell
fonte
fonte
error: You have local changes to '<filename>'; cannot switch branches.
e a ramificação não será alterada. você pode fazergit checkout -m <branch-name>
para mesclar conflitos e fazer checkout na ramificação e resolver conflitos por conta própria ougit checkout -f <branch-name>
ignorar alterações.Respostas:
Você precisa de um estado limpo para alterar ramificações. O check-out da agência somente será permitido se não afetar os 'arquivos sujos' (como Charles Bailey comenta nos comentários).
Caso contrário, você deve:
reset --hard HEAD
(se você não se importa em perder essas pequenas alterações) oucheckout -f
(Ao alternar ramificações, continue mesmo se o índice ou a árvore de trabalho diferirem de HEAD. Isso é usado para descartar as alterações locais.)Ou, mais recentemente:
git switch
:git switch -f <branch-name>
(
-f
é abreviação de--force
, que é um alias para--discard-changes
)Isso difere de
git switch -m <branch-name>
, o que desencadeia uma mescla de três vias entre a ramificação atual, o conteúdo da árvore de trabalho e a nova ramificação: você não perderá seu trabalho em andamento dessa maneira.fonte
Se você deseja descartar as alterações,
Se você deseja manter as alterações,
fonte
git stash save
(quando em muitos ramos de trabalho), em seguida,git checkout branchX
fazer algogit add/commit -m
etc.git checkout branchY
egit stash pop
para receber de volta o estoquegit stash save
agora está obsoleto em favor degit stash push
bem, deveria ser
fonte
git stash
será o padrão paragit stash save
Segue,
fonte
Observe que se você mesclou ramificações remotas ou possui confirmações locais e deseja voltar ao HEAD remoto, deve fazer:
HEAD
sozinho se referirá apenas ao commit / mesclagem local - várias vezes eu esqueci que, ao redefinir e terminar com "seu repositório está com o X confirmado adiante", quando eu pretendia destruir TODAS as alterações / confirmações e retornar à ramificação remota .fonte
Se você fez alterações nos arquivos que o Git também precisa alterar ao mudar de ramificação, isso não permitirá. Para descartar as alterações de trabalho, use:
Então, você poderá trocar de ramificação.
fonte
Nenhuma dessas respostas me ajudou porque eu ainda tinha arquivos não rastreados, mesmo após a redefinição e a ocultação. Eu tive que fazer:
fonte
alternando para uma nova ramificação perdendo alterações:
alternando para uma filial existente perdendo alterações:
fonte
Resposta fácil:
é forçar o checkout de uma filial
Forçar o check-out de uma ramificação está dizendo ao git para eliminar todas as alterações que você fez na ramificação atual e finalizar a desejada.
ou caso você esteja verificando um commit
A resposta para isso é Não , essa é literalmente a filosofia do Git: você monitora todas as alterações e que cada nó (ou seja, commit) precisa estar atualizado com as alterações mais recentes que você fez, a menos que você fez um novo commit, é claro.
Você decidiu manter as mudanças?
Em seguida, esconda-os usando
e, em seguida, para remover as alterações na ramificação desejada, use
que aplicará as alterações, mas também as manterá na fila de stash. Se você não quiser mantê-los na pilha de stash, coloque-os usando
Isso é o equivalente
apply
e entãodrop
fonte
Feche o terminal, exclua a pasta onde está o seu projeto e, em seguida, clone novamente o seu projeto e pronto.
fonte
reset --hard
!Se você deseja manter as alterações e alterar a ramificação em um comando de linha única
fonte
Mover alterações não confirmadas para uma nova ramificação
Eu criei um
.gitconfig
alias para isso:Para mudar para
new-branch-name
, use:E quaisquer alterações de arquivo e índice não confirmadas serão mantidas.
fonte
git checkout -f your_branch_name
se você tiver problemas para reverter alterações:
se você deseja remover diretórios e arquivos não rastreados:
fonte
Para mudar para outro ramo sem confirmar as alterações quando o git stash não funcionar. Você pode usar o comando abaixo:
git checkout -f nome da filial
fonte