
Eu sei, eu sei, git revert
mas acabei de aprender que não se comporta exatamente da mesma forma que svn revert
-- pelo menos não no Visual Studio 2015, ou talvez não no TortoiseGit. Eu vou explicar:
Sou novo no VS2015 e também novo no Git. Quando descobri que o VS2015 tem integração com Git pronta para uso, experimentei. No entanto, eu estava trabalhando em vários arquivos e estava pronto para enviar apenas um deles. Infelizmente, o filtro que apliquei no painel Team Explorer não se aplicava aos arquivos que foram confirmados (acho que é por isso que o título do botão é "Confirmar tudo"). Em vez disso, ele confirmou todos os arquivos "sujos" - opa!
Recorrendo ao TortoiseGit para visualizar o log do meu repositório, selecionei o commit mais recente (local) e o reverti através de "Reverter alterações por este commit". Eu esperava que esta operação revertesse os arquivos em que eu estava trabalhando para o estado "sujo" em que estavam antes de eu ter confirmado, como o que um SVN Revert faz, mas para minha surpresa, a operação reverteu meus arquivos locais para o anteriorrepositórioversão, não ao estado em que se encontravam antes de eu os ter cometido.
Claro, consegui recuperar meu trabalho porque estava todo na revisão "todos os arquivos" que eu havia enviado originalmente. Acabei de começar a copiar cada arquivo dele para o diretório correto. Mas o que estou perdendo aqui? Existe um recurso do Git que eu deveria ter usado em vez de Reverter?
Responder1
No Git, você pode remover um commit inteiro. De preferência, você faria isso apenas com commits que não são enviados por push. Toda a parte “distribuída” do Git torna isso possível. Com o SVN, suas alterações ficam imediatamente disponíveis para outras pessoas. Com o Git, eles só ficam disponíveis quando são enviados (“Sincronizar” no Visual Studio).
Portanto, em vez de reverter o commit (o que significa que as alterações erradas permaneceriam no repositório e poderiam ter efeitos colaterais inesperados), faça git reset --mixed HEAD~1
. Isso significa que seu diretório de trabalho permanecerá como está, mas o último commit será removido. Isso significa que o Git mostrará todos os arquivos modificados novamente.
A reversão no Git cria um commit “inverso” do commit que você reverteu, desfazendo todas as alterações.
Então, para submeter apenas um único arquivo, primeiro verifique git status
se o Git não possui alterações indesejadas preparadas. Em seguida, use git add path/to/file.txt
para preparar (apenas) esse arquivo. Depois disso, basta executar git commit
, usar uma mensagem de commit apropriada e pronto.
Quando você executa git commit
e o editor de texto aparece, o arquivo também contém uma lista de alterações que serão confirmadas. Inspecione cuidadosamente esta lista para ter certeza de que você só compromete o que deseja.
Além disso, não use o Visual Studio para trabalhar ativamente com o Git. Ele tenta aplicar termos herdados do TFS às operações do Git, mas eles não são os mesmos. Em vez disso, tente aprender Git no console. O Visual Studio tem algumas vantagens interessantes para trabalho somente leitura, como uma excelente visualização de comparação.