Git: supprime les validations antérieures mais conserve les modifications récentes
J'ai eu quelques engage dans mon référentiel:
comme:
A - Added Feature A
B - Removed Feature B
C - Redesigned Feature C
D - Added Feature D
E - Added Feature D
Où E est la plus récente s'engager que j'ai fait. Maintenant je veux me débarrasser des changements que j'ai faits avec fonction de C, mais je veux garder les changements D et E.
J'espère que vous pourrez m'aider.
Merci
source d'informationauteur Strernd
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez seulement de se débarrasser de l'évolution" (comme indiqué dans votre question, corps), par opposition à fait "retrait d'un commit" (comme indiqué dans le titre), une option facile est ajoutant un nouveau commit, en faisant exactement le contraire de ce que le plus tôt commettre fait.
Il n'est pas infaillible et il peut en résulter des conflits dus à des changements de fait depuis, mais ça ne change rien à l'histoire, vous permet de documenter le renversement et de ses raisons, et joue bien avec les autres copies de travail.
git revert
est l'outil utilisé pour faire ces jumeaux maléfiques d'un ensemble de commits.Rebase interactif est votre ami!
Comme d'autres l'ont dit:
...où
-i
interactive drapeau, etHEAD~5
moyens comprennent les 5 dernières s'engage dans le rebase interactif.Lorsque vous obtenez de l'éditeur comme une suite de l'émission de ce qui précède, regardez le commentaire dans le fichier ouvert:
Le plus important pour vous est Si vous supprimez une ligne de ici QUE COMMIT SERA PERDU.
Supprimez les lignes qui font référence les commits que vous voulez pour se débarrasser de, enregistrer et fermer, et git traite le reste (vous pourriez avoir à résoudre certains conflits en fonction de la nature de la validation et à l'inverse vous essayez de supprimer).
Il est important de noter que si vous avez déjà poussé votre code et d'autres ont tiré, le ci-dessus ne fonctionne pas comme les engage à trouver leur chemin de retour là-bas la prochaine fois que quelqu'un qui a votre branche extrait fait un push. Le rebase interactif supprime les commits dans la mesure où il n'y a aucune trace d'eux, alors que les autres clones ne savent pas qu'ils ont été supprimés. La prochaine fois, ils poussent, ils vont essayer et rétablir comme les clones locaux "voir" que l'origine n'a pas les objets (commits), que vous avez supprimé.
Si vous avez seulement des changements au niveau local, vous êtes probablement mieux de la suite d'une relocalisation de réponse. Si vous avez publié les changements n'importe où, alors vous ne voulez pas cela parce que cela va changer l'histoire, ce qui signifie que tout le monde devra également rebase ou vous aurez votre fautif s'engager fusionné.
Si d'autres personnes ont vos commits, le plus propre chose à faire est de rétablir la délinquance de changement, pas d'accise sur l'ensemble du projet. Utilisation
git revert COMMIT_ID
pour créer un nouveau commit qui annule les modifications apportées dansCOMMIT_ID
.ce qui est appelé la relocalisation: vous souhaitez
-i
commutateur.lire: https://www.atlassian.com/git/tutorial/rewriting-git-history#!rebase-i
pour une semblable question/réponse, voir: https://stackoverflow.com/a/2938393/2536029
pour ce faire, procédez comme suit:
puis déplacez commettre C pour être le premier en bas, vous aurez
vous enregistrer et quitter, puis
cela permet d'annuler les commettre C.
vous aurez la liste de vos 3 derniers messages de commit
vous suffit d'insérer x git reset HEAD^ avant la validation que vous souhaitez annuler, vous souhaitez annuler commettre C, de sorte qu'il sera comme ceci
sortie rebase console, vous verrez que votre livraison n'est plus dans les journaux et leurs fichiers sont mis en scène.
Si vous utilisez TortoiseGit dans Windows, vous pouvez droit-cliquez sur le Git dossier, puis cliquez sur
TortoiseGit > Show log
. Vous pouvez consulter tous les commits effectués avant et de vérifier ensuite la validation que vous souhaitez revenir à.Cliquez sur l'engagement et vous pouvez voir les fichiers modifiés ci-dessous. Cliquez droit sur les fichiers à annuler, puis cliquez sur
revert to parent revision
.L'utilisation de git revert
De loin, la meilleure solution est d'utiliser git revert. Cela fera un nouveau commit qui annule les modifications dans un SHA. C'est un moyen très sûr pour supprimer un commit, et peut être facilement fusionner avec d'autres ou les branches distantes.
Comment utiliser Git Revert