No meu repositório git, que está rastreando um repositório svn, fiz várias edições em um único arquivo.
Agora eu quero reverter essas alterações (como svn revert), mas apenas partes do arquivo.
Quero poder visualizar as diferenças no arquivo, descartar (reverter) as alterações que não desejo e manter as alterações que desejar.
a
git add -i
O comando parece ter uma opção para fazer isso, mas eu não quero preparar isso ainda.
fonte
Eu acredito que você pode fazer isso de maneira mais simples com:
Na página de manual:
fonte
a
opção no modo de patch para descartar um arquivo inteiro, masgit checkout -- <file>
funciona conforme o esperado. Alguém sabe o porquê?Você pode executar
git diff
no arquivo, salve o diff resultante, editá-lo para remover as alterações que deseja salvar, em seguida, executá-lo atravéspatch -R
de desfazer os diffs restantes.fonte
git diff
mostra o arquivo inteiro como alterado. Isso geralmente acontece quando você salva o arquivo usando diferentes finais de linha do que era anteriormente. Isso também causariapatch
a rejeição do arquivo de correção. Isso soa como o que poderia ter acontecido?Parece que você quer
Você pode então usar
para ver que alteração será feita antes da confirmação (como reverter é apenas uma confirmação em uma direção avançada que replica o inverso de uma alteração no passado)
Se você estivesse com um repositório Git puro, poderia, dependendo de seus objetivos, utilizar rebase interativo (
git rebase -i
) para voltar ao commit de que não gostava e editar o commit retroativamente, para que as mudanças de que você não gosta nunca acontecessem. , mas geralmente é apenas porque, se você SABE, nunca mais precisará vê-lo.fonte
Relendo a pergunta, parece que você deseja reverter as alterações que estão na sua árvore de trabalho e não as que foram confirmadas anteriormente, mas algumas das outras respostas fazem parecer que minha leitura pode estar errada. Você pode esclarecer?
Se as alterações estiverem apenas na sua cópia de trabalho, a maneira mais fácil de fazer isso é preparar as alterações com as quais você deseja manter:
Em seguida, jogue fora as alterações que você não deseja manter, verificando a versão do índice:
Em seguida, descompacte as alterações se você ainda não as deseja:
Esta receita reverte apenas as alterações selecionadas no arquivo (ou arquivos que você especificar) e não cria nenhuma confirmação temporária que precisa ser revertida.
Se você deseja aplicar seletivamente apenas algumas das alterações feitas nas confirmações anteriores, poderá redefinir um arquivo para um estado confirmado anteriormente primeiro:
Em seguida, você pode seguir a receita anterior para preparar
git add -i <file>
as alterações que deseja manter,git checkout -- <file>
jogar fora as alterações indesejadas egit reset -- <file>
'desestabilizar' as alterações.fonte
As opções de linha de comando descritas nas respostas aqui são úteis quando o arquivo está em um servidor ao qual estou acessando através de um terminal ssh. No entanto, quando o arquivo está na minha máquina local, prefiro a seguinte maneira:
Abra o arquivo no editor netbeans (que vem com suporte ao git). O Netbeans coloca marcas vermelhas / verdes / azuis nos números das linhas para indicar onde as coisas foram excluídas / adicionadas / modificadas (respectivamente).
Clicar com o botão direito do mouse em qualquer uma dessas marcas oferece a opção de desfazer essa alteração. Além disso, você pode clicar com o botão direito do mouse nas marcas vermelhas e azuis para encontrar a versão antiga em um pop-up.
fonte