Como remover uma confirmação de saída não enviada no Visual Studio?

114

Eu acidentalmente enviei uma alteração em estágio em um novo branch no Visual Studio 2017 para meu repositório local. Ele não foi enviado para o repositório remoto. Quero me livrar dele, mas não consigo encontrar uma maneira de fazer isso. Eu fiz a realocação do branch master local para o novo branch. Então eu apaguei o novo ramo. Mas Outgoing Commits ainda mostra isso. Como deletar ou reverter?

insira a descrição da imagem aqui

Tony_Henrich
fonte
Obrigado por esta pergunta, eu tinha a mesma pergunta
Imran Rizvi

Respostas:

178

Abra a guia de histórico no Team Explorer a partir do bloco Ramos (clique com o botão direito em seu ramo). Então, no histórico, clique com o botão direito no commit antes daquele que você não deseja enviar, escolha Reset. Isso moverá o branch de volta para aquele commit e deve se livrar do commit extra que você fez. Para reiniciar antes de um determinado commit, você deve selecionar seu pai.

Dependendo do que você deseja fazer com as alterações, escolha difícil , o que as eliminará localmente. Ou escolha soft, que desfará o commit, mas deixará seu diretório de trabalho com as mudanças em seu commit descartado.

Jessehouwing
fonte
22
Vale a pena colocar em negrito a parte em que ** você tem que optar por RESET no PAI do commit bagunçado ** - estranhamente VS2017, logo após você fazer um commit, oferece uma opção de menu que realiza o reset targetd no commit você acabou de fazer (um no-op) - passei alguns minutos até encontrar sua postagem e perceber que deveria redefinir [para] o commit dos pais. A opção de menu "Redefinir" está um pouco mal formulada - parece que vai redefinir um commit particular == implicando que ele deve ser usado naquele commit. Se fosse Reset To, acho que teria entendido mais rápido
Caius Jard
1
(@JH) Obrigado pela resposta. .. atCJ Obrigado pelo comentário. atJH Obrigado por colocar essa parte em negrito ... atEverybody ... essa é a parte em que eu estava preso ... e quero dizer preso. # liberdade
granadaCoder
A nomenclatura está de acordo com a forma como git chama o comando. Se você editou arquivos, eles também serão redefinidos. Se você tiver arquivos testados, eles também serão redefinidos. É por isso que há um reset no commit mais recente também. Ele redefine para esse commit.
jessehouwing de
1
Útil saber. Obrigado pela resposta
Rob C
Obrigado Alot It Helpssss
Ashish Kamble
70

Não consegui encontrar uma única boa resposta que me ajudasse a me livrar desse problema.

Digamos que o nome do branch para o qual você fez o commit acidentalmente, é master. Seguir quatro passos simples provou ser um mundo para mim:

  1. Vá para Filiais
  2. Escolha ou crie qualquer filial diferente master
  3. Excluir versão local / espaço de trabalho de master
  4. Mudar para mestre de remotes/origin
Legião do Caos
fonte
5
Esta é a resposta que funciona, você não precisa empurrar orevert
sojim
2
isso funciona, mas você está preso quando deseja apenas alguns (não todos) commits específicos dos Commits de saída.
KatariaA
1
Acabei de receber alguns votos negativos. Os comentários teriam sido ótimos.
Chaos Legion
1
Trabalho. Solução limpa, rápida e simples.
Tom Tom
2
OMG, OBRIGADO! Nunca tirei 45 minutos para desfazer alterações, até esta noite. Seu comentário salva o dia.
PBJ
3

Supondo que você tenha enviado as alterações mais recentes ao servidor:

  1. Feche o Visual Studio e exclua sua cópia local do projeto
  2. Abra o Visual Studio, vá para a guia Team Explorer e clique em Gerenciar conexões. (plugue)
  3. Clique na seta suspensa ao lado de Manage Connections, Connect to a Project
  4. Selecione o projeto, confirme o caminho local e clique no botão Conectar.

Depois de reabrir o projeto, os commits e as alterações devem ser zero.

JB4375
fonte
2

TL; DR:

Use git reset --soft HEAD~no cmd da pasta .sln


Eu estava enfrentando isso hoje e fiquei surpreso com o que VSCodesugere tal coisa, enquanto é irmão mais velhoVisual Studio não.

A maioria das respostas foi útil; se eu tiver mais commits feitos antes, perder todos eles seria frustrante. Além disso, seVSCode fizer isso em meio segundo, não deve ser complexo.

Apenas a resposta de jessehouwing foi a mais próxima de uma solução simples.


Supondo que os commits indesejados foram os últimos a acontecer, aqui está como eu resolvi:

Vá para Team Explorer-> Sync. Lá você veria todos os commits. Pressione o Actionsmenu suspenso eOpen Command Prompt

exemplo indesejado-commit-resolvido

Você terá a janela cmd solicitada, escreva lá git reset --soft HEAD~. Se houver vários commits indesejados, adicione o valor após ~(ou seja git reset --soft HEAD~5)


(Se você não estiver usando git, verifique o uso coloquial).

Espero que ajude e espero que na próxima versão a equipe do VS o adicione integrado

Tzahi Leh
fonte
0

Vá para a guia Team Explorer e clique em Ramificações. Nas filiais, selecione sua filial de remotos / origem. Por exemplo, você deseja redefinir seu branch master. Clique com o botão direito do mouse na ramificação mestre em remotos / origem e selecione Reiniciar e clique em Excluir alterações. Isso irá redefinir sua filial local e remover todas as alterações confirmadas localmente.

alexiscalingasan
fonte
0

Tente rebase seu branch master local em seu branch master remoto / de origem e resolva quaisquer conflitos no processo.

orangeCl0uds
fonte
-1

Você tem 2 opções aqui para fazer isso para descartar todos os seus commits de saída OU para desfazer o commit específico.

1- Descarte todos os seus commits de saída:

Para descartar todos os seus commits de saída Por exemplo, se você tiver um branch local chamado master de um branch remoto, você pode:

1- Renomeie seu branch local de master para qualquer coisa para que você possa removê-lo. 2- Remova o ramo renomeado. 3- criar um novo ramo a partir do mestre

Então agora você tem um novo branch sem seus commits ..

2- Desfazer commit específico: Para desfazer commit específico, você deve reverter o desnecessário por:

1- Clique duas vezes no commit desnecessário. Clique duas vezes no commit desnecessário 2- Clique em reverter Clique em reverter

Mas, para sua informação, o commit revertido aparecerá na história de seus commits com o commit de reversão.

Mohammad Abu Saloum
fonte