git checkout -p
Descarta o estrago pedaço por pedaço, e não o arquivo inteiro.
O -p de patch transforma o descarte num interrogatório: o git mostra cada trecho alterado e pergunta, um a um, se aquele deve voltar ao que está no índice. y descarta o trecho, n preserva, e abre o pedaço para edição manual.
Salva o dia quando o arquivo mistura conserto legítimo com restos de depuração: em vez de perder tudo ou fazer arqueologia no editor, você joga fora só os println. A porcelana moderna oferece o mesmo gesto como git restore -p.
$ git checkout -p helpers.go
diff --git a/helpers.go b/helpers.go
@@ -12,6 +12,7 @@
+ log.Println("depurando aqui")
Discard this hunk from worktree [y,n,q,a,d,e,?]? y