Comment annuler la dernière validation git Non poussée sans perdre les modifications

Existe-t-il un moyen de rétablir un commit afin que ma copie locale conserve les modifications apportées dans ce commit, mais elles deviennent des modifications non validées dans ma copie de travail? L'annulation d'un commit vous amène à la validation précédente - je veux garder les modifications apportées mais je les ai commises à la mauvaise branche.

Cela n'a pas été poussé, seulement commis.

286
git
demandé sur the Tin Man 2013-11-08 16:47:23

3 réponses

, Il ya beaucoup de façons de le faire, par exemple:

Au cas où vous auriez non poussé le commit publiquement encore:

git reset HEAD~1 --soft   

C'est tout, vos modifications de validation seront dans votre répertoire de travail, tandis que la dernière validation sera supprimée de votre branche actuelle. Voir git reset homme


Dans le cas où vous avez fait pousser publiquement (sur une branche appelée 'master'):

git checkout -b MyCommit //save your commit in a separate branch just in case (so you don't have to dig it from reflog in case you screw up :) )

Revenir commettre normalement et poussez -

git checkout master
git revert a8172f36 #hash of the commit you want to destroy
# this intorduces a new coomit (say, it's hash is 86b48ba) which removes changes, introduced in the coomit in question (but those changes are still visible in the history)
git push origin master

Maintenant, si vous voulez ayez ces modifications en tant que modifications locales dans votre copie de travail ("afin que votre copie locale conserve les modifications apportées dans cette validation") - il suffit de rétablir la validation avec l'option -no-commit:

git revert --no-commit 86b48ba (hash of the revert commit).

J'ai conçu un petit exemple: https://github.com/Isantipov/git-revert/commits/master

516
répondu Isantipov 2018-02-05 12:12:40

Si vous avez poussé les modifications, vous pouvez {[1] } et déplacer les fichiers sur scène sans utiliser une autre branche.

git show HEAD > patch
git revert HEAD
git apply patch

Il va créer un fichier de correctif qui contient les dernières modifications de branche. Puis il annuler les changements. Et enfin, appliquez les fichiers de correctifs à l'arborescence de travail.

8
répondu Aminadav Glickshtein 2016-03-25 09:07:59

Pour le cas: "Cela n'a pas été poussé, seulement."- si vous utilisez IntelliJ (ou un autre IDE JetBrains), vous pouvez faire ensuite.

Aller à la fenêtre de contrôle de Version (Alt + 9) - "onglet " Journal". Cliquez-droit sur un commit avant votre dernier. Réinitialiser la branche actuelle à ici - > pick Soft - > push Reset.

Fait.

Cela "décommittera" vos modifications (vous ne les perdrez pas) et vous ramènera au point avant votre dernier commit local.

0
répondu Eduard Streltsov 2018-06-05 08:18:49