É possível fazer o git-checkout de uma única linha em vez de todo o arquivo?

86

Se eu modifiquei várias linhas de um arquivo versionado, é possível desfazer as mudanças de uma linha por linha de comando?

Assim como eu faria para um arquivo inteiro com:

git checkout /path/to/file.extension

mas fazendo algo como, digamos

git checkout /path/to/file.extension --line 10

Isso é possível?

LuisVM
fonte

Respostas:

124

Você pode usar git checkout -ppara ver cada pedaço individualmente e decidir se deseja verificá-los ou deixá-los como estão (e isso também leva um argumento de caminho opcional, se desejar restringi-lo ainda mais).

Matt Enright
fonte
Este método fornece partes muito grandes, em vez de linhas ... :(
betontalpfa
46

Para elaborar a resposta de Matt, git checkout --patch -- <path argument>inicia um modo interativo com as seguintes opções:

y - stage this hunk
n - do not stage this hunk

q - quit; do not stage this hunk or any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk

s - split the current hunk into smaller hunks
e - manually edit the current hunk

? - print help

As opções y n se esão um bom ponto de partida.

Veja também:

Shaun Luttin
fonte