84 votes

Sélective de revenir ou de la caisse des modifications à un fichier dans Git?

Est-il une commande qui permet de partiellement annuler les modifications apportées à un fichier (ou des fichiers) dans le répertoire de travail?

Supposons que vous avez modifié un fichier beaucoup, mais vous vous rendez compte que vous souhaitez annuler certaines des modifications à ce commis de l'état, mais pas les autres changements.

Je suis prévoyant une option pour git checkout qui fonctionne un peu comme l' git add -p, c'est à dire qu'il passe par le fichier de morceau par morceau et vous demande si vous voulez le garder ou pas.

112voto

thisgeek Points 1226

Avec git version >= 1.7.1 je peux

git checkout -p

Je ne suis pas sûr de quand cette fonctionnalité a été introduite.

82voto

Charles Bailey Points 244082

Vous pouvez utiliser

git add -p <path>

en scène les morceaux que vous souhaitez conserver dans un fichier particulier, alors

git checkout -- <path>

pour annuler l'arbre de travail les modifications que vous ne souhaitez pas conserver, par la vérification de la mise en scène de la version du fichier.

Enfin, vous pouvez utiliser

git reset -- <path>

pour revenir à la mise en scène du fichier de la version la plus récente version du fichier de vous laisser avec vos modifications unstaged.

8voto

Koraktor Points 9532

git checkout $file rétablit l'état du fichier $file à la dernière commis de l'état. Je pense que vous pouvez utiliser git checkout SHA-1 -- $file de rétablir la validation identifiés par l'algorithme SHA-1.

1voto

araqnid Points 33350

Combien de livraisons avez-vous besoin de revenir en arrière et sélectionner à partir de? Si c'est juste une, peut-être prendre une branche juste avant, extrayez le fichier que vous avez commis, et ensuite utiliser git add -p pour l'ajouter comment vous vouliez qu'il. Ensuite, vous pouvez retourner à l'endroit où vous étiez et extraire le fichier à partir de votre temp branche.

c'est:

git checkout -b temp troublesome-commit^
git checkout troublesome-commit -- path/to/file
git add -p path/to/file
git commit -c troublesome-commit
git checkout @{-1}
git checkout temp -- path/to/file
git commit path/to/file
git branch -D temp

D'autres options incluent de revenir et de l'édition de s'engager avec git rebase -i (marquage de la valider en tant que edit, puis de faire un git reset HEAD^ et de refaire la validation en cas de chute dans l'interpréteur de commandes).

Si les changements que vous devez sélectionner à partir, sont réparties sur une série de commits, il peut être préférable de les extraire, les patchs (ou un patch couvrant l'ensemble des cas) et de la main-d'éditer le patch, prenant les changements que vous voulez garder et de nourrir les résiduelle en git apply --reverse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X