Eu quero reverter um commit específico no git. Infelizmente, nossa organização ainda usa o CVS como padrão; portanto, quando eu me comprometo com o CVS, vários commits git são agrupados em um. Nesse caso, eu adoraria destacar o commit git original, mas isso é impossível.
Existe uma abordagem semelhante à git add --patch
que me permita editar seletivamente diffs para decidir quais partes de um commit serão revertidas?
Respostas:
Use a opção
--no-commit
(-n
) paragit revert
, em seguida, desestabilize as alterações e usegit add --patch
:Nota: Os arquivos adicionados usando o git add --patch são os que você deseja reverter, e não os que deseja manter.
fonte
git reset --hard
para descartar as outras alterações que você não deseja reverter.git reset --hard
é perigoso para iniciantes, pois pode perder as edições desejadas. Em vez de se acostumargit status
, isso sugeregit checkout -- FILE..
reverter as coisas com mais segurança.git
;git revert
deve apenas ter uma--patch
discussão.git revert
é usado para reverter confirmações inteiras. Você pode usargit checkout -p
para selecionar interativamente os bits a serem revertidos.commit
primeiro, oustash
, então tenterevert
.Eu usei o seguinte com sucesso.
Primeiro, reverta a confirmação completa (coloca-a no índice), mas não a confirme.
Em seguida, remova interativamente as mudanças GOOD revertidas do índice
Em seguida, confirme diff reverso das mudanças ruins
Finalmente, as alterações GOOD revertidas (que não foram testadas pelo comando reset) ainda estão na árvore de trabalho. Eles precisam ser limpos. Se nenhuma outra alteração não confirmada for deixada na árvore de trabalho, isso poderá ser feito por
fonte
reset HEAD .
), porque não requer a limpeza final do diretório de trabalho?reset -p
é mais curta que areset HEAD
seguida poradd -p
. Mas ainda requer a limpeza, pois os "bons" blocos que foram redefinidos ainda estão no diretório de trabalho após a confirmação.Pessoalmente, prefiro esta versão, que reutiliza a mensagem de confirmação gerada automaticamente e oferece ao usuário a oportunidade de editar e colar a palavra "Parcialmente" antes de finalmente confirmar.
fonte
Solução:
fonte
Outra alternativa (se a versão atual de um arquivo não estiver muito longe da versão que você está tentando reverter) é obter o hash do commit imediatamente antes do que você deseja reverter parcialmente (de
git log
). Então seu comando se torna:Isso altera os arquivos na sua árvore de trabalho, mas não cria confirmações; portanto, se você realmente encher tudo, pode começar novamente
git reset --hard -- file/you/want/to/fix.ext
.fonte
Você pode usar git-revert -n e, em seguida, use add --patch para selecionar pedaços.
fonte