Je veux revenir sur un commit particulier dans git. Malheureusement, notre organisation utilise toujours CVS comme standard, donc lorsque je me reconnecte à CVS, plusieurs commits git sont regroupés en un seul. Dans ce cas, j'adorerais sélectionner le commit git original, mais c'est impossible.
Existe-t-il une approche similaire à git add --patch
celle qui me permettrait d'éditer sélectivement les différences pour décider quelles parties d'un commit annuler?
Réponses:
Utilisez l' option
--no-commit
(-n
) pourgit revert
, puis annulez les modifications, puis utilisezgit add --patch
:Remarque: les fichiers que vous ajoutez à l'aide de git add --patch sont les fichiers que vous souhaitez restaurer, et non les fichiers que vous souhaitez conserver.
la source
git reset --hard
pour annuler les autres modifications que vous ne vouliez pas annuler.git reset --hard
est dangereux pour les débutants, car il pourrait perdre les modifications voulues. Au lieu de cela, habituez-vousgit status
, cela suggèregit checkout -- FILE..
de revenir en arrière de manière plus sûre.git
;git revert
devrait juste prendre un--patch
argument.git revert
est utilisé pour annuler les commits entiers. Vous pouvez utilisergit checkout -p
pour sélectionner de manière interactive les bits à rétablir.commit
abord, soitstash
ensuite essayezrevert
.J'ai utilisé ce qui suit avec succès.
Commencez par annuler le commit complet (le met dans l'index) mais ne le validez pas.
Ensuite, supprimez de manière interactive les bonnes modifications rétablies de l'index
Puis commettez la différence inverse des mauvais changements
Enfin, les bons changements rétablis (qui n'ont pas été mis en scène par la commande de réinitialisation) sont toujours dans l'arborescence de travail. Ils doivent être nettoyés. Si aucune autre modification non validée n'est laissée dans l'arborescence de travail, cela peut être
la source
reset HEAD .
), car elle ne nécessite pas le nettoyage final du répertoire de travail?reset -p
est plus courte quereset HEAD
suivie paradd -p
. Mais cela nécessite toujours le nettoyage, puisque les "bons" morceaux qui ont été réinitialisés sont toujours dans le répertoire de travail après la validation.Personnellement, je préfère cette version, qui réutilise le message de validation généré automatiquement et donne à l'utilisateur la possibilité d'éditer et de coller le mot «partiellement» avant de finalement s'engager.
la source
Solution:
la source
Une autre alternative (si votre version actuelle d'un fichier n'est pas trop éloignée de la version que vous essayez de rétablir) est d'obtenir le hachage du commit juste avant celui que vous souhaitez annuler partiellement (à partir de
git log
). Alors votre commande devient:Cela modifie les fichiers dans votre arbre de travail mais ne crée aucun commit, donc si vous avez vraiment du mal, vous pouvez simplement recommencer
git reset --hard -- file/you/want/to/fix.ext
.la source
Vous pouvez utiliser git-revert -n, puis utiliser add --patch pour sélectionner des morceaux.
la source