tl; dr – use git revert --no-commit SHA
Em minha contribuição para i18n gem, alguém apontou que meu teste é inútil,
Ele estava totalmente certo, então decidi removê-lo. Meu primeiro pensamento foi “Oh, eu posso apenas git revert
este commit”.
NOPE !
Percebi que esse commit também contém código que está bom e quero mantê-lo.
Portanto, a primeira lição importante aqui: mantenha seus commits pequenos
Eu era teimoso em usar, git
então, depois de algumas consultas no Google, algumas soluções ruins / insatisfatórias * Eu finalmente encontrei isto: --no-commit
flag
Como o nome sugere, ele simplesmente não confirma alterações. Portanto, provavelmente posso editá-los ou … dar uma olhada neles!
Para fazer meu trabalho funcionar, fiz o seguinte:
-
git revert --no-commit ee27f3d
PS você pode usar @ ~ 1 para reverter o último commit.
@ é o alias de HEAD e ~ 1 é uma série de commits antes dele
git revert ee23f3d ~ 2 também funcionaria e reverter dois commits antes de ee23 …)
git status
que retornou conflitos e alterações indesejadas:
You are currently reverting commit ee27f3d.
(fix conflicts and run "git revert --continue")
(use "git revert --abort" to cancel the revert operation)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: lib/i18n/tests/lookup.rb
modified: lib/i18n/tests/unwanted.rb
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)
both modified: lib/i18n/backend/base.rb
both modified: lib/i18n/tests/interpolation.rb
duas coisas ruins aconteceram aqui: há conflitos e arquivo que eu não quero reverter.
Em primeiro lugar, vamos lidar com o arquivo indesejado.
+git reset HEAD lib/i18n/tests/unwanted.rb
recebemos mensagem:
Unstaged changes after reset:
M lib/i18n/tests/unwanted.rb
Vamos fazer git status
e rolar um pouco:
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: lib/i18n/tests/unwanted.rb
o que significa que este arquivo será ignorado durante o commit (mas as mudanças permanecerão).
Próximos arquivos com conflitos. Como não queríamos alterá-los de qualquer maneira, podemos simplesmente colocá-los Changes not staged for commit
(como fizemos antes com o arquivo indesejado).
git reset lib/i18n/backend/base.rb
e
git reset ib/i18n/tests/interpolation.rb
PS No caso de desejarmos reverter um arquivo com conflitos, teríamos que corrigi-los manualmente e então git add fixed/file.rb
agora git status
imprime:
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: lib/i18n/tests/lookup.rb
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: lib/i18n/tests/unwanted.rb
modified: lib/i18n/backend/base.rb
modified: lib/i18n/tests/interpolation.rb
Agora podemos rejeitar todas as alterações em arquivos que não pretendíamos alterar:
git checkout .
(não se preocupe, não toca nos arquivos em changes to be commited
)
e agora git status
imprime:
You are currently reverting commit ee27f3d.
(fix conflicts and run "git revert --continue")
(use "git revert --abort" to cancel the revert operation)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: lib/i18n/tests/lookup.rb
só podemos ver modified: lib/i18n/tests/lookup.rb
lá, então agora podemos escrever:
git revert --continue
para comprometer tudo o que fizemos.
A última etapa é enviar mensagem. Por padrão:
1 Revert "Interpolate now works for array"
2
3 This reverts commit ee27f3d85ab275757b144aa216c1a282ef9bb345.
4
qual IMHO deve ser alterado porque não estamos revertendo um commit (usamos git revert
apenas como uma ferramenta auxiliar).
Removi Reverter do título e adicionei uma nota à descrição:
1 Remove redundant test for lookup
2
3 This reverts PART of commit ee27f3d85ab275757b144aa216c1a282ef9bb345.
4 thanks @clemens
5 https://github.com/svenfuchs/i18n/pull/282/files#r37780129
e pronto!
* git reset --hard
não me satisfaz