Est-il possible de git-checkout une seule ligne au lieu du fichier entier?

86

Si j'ai modifié plusieurs lignes d'un fichier versionné, est-il possible d'annuler les modifications d' une ligne par ligne de commande?

Tout comme je le ferais pour un fichier entier avec:

git checkout /path/to/file.extension

mais faire quelque chose comme, dis

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

Est-ce possible?

LuisVM
la source

Réponses:

124

Vous pouvez utiliser git checkout -ppour voir chaque morceau individuellement et décider de les extraire ou de les laisser tels quels (et cela prend également un argument de chemin facultatif si vous souhaitez le restreindre davantage).

Matt Enright
la source
Cette méthode donne des pièces trop grandes, au lieu de lignes ... :(
betontalpfa
46

Pour élaborer sur la réponse de Matt, git checkout --patch -- <path argument>lance un mode interactif avec les options suivantes:

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

Les options y n set esont un bon point de départ.

Voir également:

Shaun Luttin
la source