Dans mon dépôt git qui suit un dépôt svn, j'ai apporté un certain nombre de modifications à un seul fichier.
Maintenant, je veux annuler ces changements (comme svn revert), mais seulement des parties du fichier.
Je veux pouvoir afficher les différences sur le fichier, annuler (annuler) les modifications que je ne veux pas et conserver les modifications que je souhaite.
les
git add -i
La commande semble avoir une option pour le faire mais je ne veux pas encore la mettre en scène.
la source
Je pense que vous pouvez le faire plus simplement avec:
Depuis la page de manuel:
la source
a
option en mode patch pour supprimer un fichier entier, maisgit checkout -- <file>
fonctionne comme prévu. Quelqu'un sait pourquoi?Vous pouvez exécuter
git diff
le fichier, enregistrez le diff résultant, le modifier pour supprimer les modifications que vous ne souhaitez enregistrer, puis exécutez - le parpatch -R
de défaire les diffs restants.la source
git diff
le fichier entier a été modifié. Cela se produit généralement lorsque vous avez enregistré le fichier en utilisant des fins de ligne différentes de ce qu'il était auparavant. Cela entraînerait également lepatch
rejet du fichier de correctif. Cela ressemble-t-il à ce qui aurait pu arriver?On dirait que tu veux
Vous pouvez ensuite utiliser
pour voir quel changement sera fait avant de s'engager (car le retour est juste un commit dans une direction avant qui réplique l'inverse d'un changement dans le passé)
Si vous étiez avec un dépôt Git pur, vous pourriez éventuellement, en fonction de vos objectifs, utiliser interactif rebase (
git rebase -i
) pour revenir au commit que vous n'aimez pas et modifier le commit rétroactivement afin que les changements que vous n'aimez pas ne se produisent jamais , mais ce n'est généralement que si vous SAVEZ que vous ne voudrez plus jamais le revoir.la source
En relisant la question, il semble que vous vouliez annuler les changements qui se trouvent dans votre arbre de travail et non les changements qui ont été précédemment validés, mais certaines des autres réponses donnent l'impression que ma lecture peut être erronée. Pouvez-vous clarifier?
Si les modifications ne se trouvent que dans votre copie de travail, le moyen le plus simple de le faire est de mettre en scène les modifications que vous souhaitez conserver:
Jetez ensuite les modifications que vous ne souhaitez pas conserver en vérifiant la version d'index:
Ensuite, annulez les modifications si vous ne voulez pas encore les mettre en scène:
Cette recette annule uniquement les modifications sélectionnées dans le fichier (ou les fichiers que vous spécifiez) et ne crée pas de validation temporaire qui doit ensuite être annulée.
Si vous souhaitez appliquer de manière sélective uniquement certaines des modifications apportées lors des validations précédentes, vous pouvez d'abord réinitialiser un fichier à un état de validation précédent:
Ensuite, vous pouvez suivre la recette précédente
git add -i <file>
pour mettre en scène les modifications que vous souhaitez conserver,git checkout -- <file>
éliminer les modifications indésirables etgit reset -- <file>
«annuler» les modifications.la source
Les options de ligne de commande décrites dans les réponses ici sont pratiques lorsque le fichier se trouve sur un serveur auquel j'accède via un terminal ssh. Cependant, lorsque le fichier est sur ma machine locale, je préfère la méthode suivante:
Ouvrez le fichier dans l'éditeur netbeans (fourni avec le support git). Netbeans place des marques rouges / vertes / bleues sur les numéros de ligne pour indiquer où les éléments ont été supprimés / ajoutés / modifiés (respectivement).
Un clic droit sur l'une de ces marques vous donne la possibilité d'annuler cette modification. De plus, vous pouvez faire un clic droit sur les marques rouges et bleues pour trouver voir l'ancienne version dans une fenêtre contextuelle.
la source