Je souhaite annuler les modifications apportées par un commit particulier à un fichier donné uniquement.
Puis-je utiliser la commande git revert pour cela?
Une autre façon simple de le faire?
git
version-control
revert
Lakshman Prasad
la source
la source
Réponses:
La façon la plus propre que j'ai vue de faire cela est décrite ici
Similaire à la réponse de VonC mais en utilisant
git show
etgit apply
.la source
fatal: unrecognized input
-3
drapeau à git apply pour la fusion à trois lorsque le correctif échoue, car je corrige généralement un changement un peu en arrière.some_file.c
inclut le chemin d' accès au fichier s'il y en a un, sinon vous ne corrigerez rien en silence :)En supposant que vous pouvez modifier l'historique des validations, voici un flux de travail pour annuler les modifications d'un seul fichier lors d'un commit précédent:
Par exemple, vous souhaitez annuler les modifications dans 1 fichier (
badfile.txt
) dans la validationaaa222
:Rebase sur le commit de base, modifie le commit du problème et continue.
1) Démarrez le rebase interactif:
2) Marquez la validation du problème pour édition dans l'éditeur en changeant
pick
ene
(pour édition):3) Annulez les modifications apportées au mauvais fichier:
4) Ajoutez les changements et modifiez le commit:
5) Terminez le rebase:
la source
edit
ne montraient pas comme modifiés. Mais le agit show -- badfile.txt | git apply -R
donné la réponse dont j'avais besoin <3git revert
est pour tout le contenu de fichier dans un commits.Pour un seul fichier, vous pouvez le script :
(Depuis les utilitaires git-shell-scripts de smtlaissezfaire )
Remarque:
une autre méthode est décrite ici si vous n'avez pas encore validé votre modification actuelle.
git checkout
a quelques options pour un fichier, modifiant le fichier de HEAD, écrasant votre changement.Dropped.on.Caprica mentionne dans les commentaires :
la source
git revert-file <hash> <file-loc>
et que ce fichier spécifique soit rétabli. J'ai soulevé cette réponse (même si j'ai dû faire quelques modifications pour fonctionner correctement). Vous pouvez trouver une copie de mon.gitconfig
script édité ici: gist.github.com/droppedoncaprica/5b67ec0021371a0ad438J'utiliserais simplement l'
--no-commit
option pourgit-revert
, puis supprimerais les fichiers que vous ne voulez pas récupérer de l'index avant de finalement le valider. Voici un exemple montrant comment annuler facilement les modifications apportées à foo.c dans le deuxième commit le plus récent:Le premier
git-reset
"désactive" tous les fichiers, de sorte que nous puissions ensuite rajouter uniquement le fichier que nous voulons restaurer. La finalegit-reset --hard
supprime les fichiers restants que nous ne voulons pas conserver.la source
Beaucoup plus simple:
puis
puis
le fichier est parti et la validation du hachage, du message, etc. est identique.
la source
git checkout -- path/to/file/to/revert
étape? De plus, ce n'est pas vrai que le hachage est le même après coup, non? La dernière phrase pourrait être meilleure comme quelque chose comme: "Le résultat est que le dernier commit est remplacé par un nouveau qui diffère uniquement en ce qu'il ne contient pas les modifications du fichier rétabli."La commande ci-dessus retirera le fichier de la validation, mais elle se reflétera dans
git status
.La commande ci-dessus annulera les modifications (en conséquence, vous obtenez le même fichier que HEAD).
(Passer
--amend
pour modifier le commit.)Avec cela, le fichier qui est déjà dans le commit est supprimé et restauré.
Les étapes ci-dessus doivent être suivies à partir de la branche où la validation est effectuée.
la source
Vous pouvez suivre cette procédure:
git revert -n <*commit*>
(-n
annuler toutes les modifications mais ne les validera pas)git add <*filename*>
(nom du / des fichier / s que vous souhaitez rétablir et valider)git commit -m 'reverted message'
(ajouter un message pour revenir)la source
Si vous souhaitez réinitialiser les modifications sur un fichier de votre dernier commit, c'est ce que j'utilise habituellement. Je pense que c'est la solution la plus simple.
Veuillez noter que le fichier sera ajouté à la zone de préparation.
J'espère que ça aide :)
la source