web-dev-qa-db-fra.com

Comment désengager le dernier git non poussé commit sans perdre les modifications

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

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

337
Mr. Boy

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

au cas où vous auriez pas poussé le commit publiquement pour le moment:

git reset HEAD~1 --soft   

Ça y est, vos modifications de commit seront dans votre répertoire de travail, alors que le DERNIER commit sera supprimé de votre branche actuelle. Voir git reset man


Dans le cas où vous avez Push publiquement (sur une branche appelée 'maître'):

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 Push 

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 souhaitez que ces modifications soient apportées en tant que modifications locales dans votre copie de travail ("afin que votre copie locale conserve les modifications apportées dans cette validation"), il vous suffit de rétablir la validation avec l'option -no-commit:

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

J'ai fabriqué un petit exemple: https://github.com/Isantipov/git-revert/commits/master

624
Isantipov

Si vous avez poussé les modifications, vous pouvez undo et déplacer les fichiers sur scène sans utiliser d'autre branche.

git show HEAD > patch
git revert HEAD
git apply patch

Il créera un fichier de correctif contenant les dernières modifications de branche. Ensuite, il annule les modifications. Et enfin, appliquez les fichiers de correctif à l’arbre de travail.

8

Dans mon cas, cela arrive surtout lorsque je modifie la branche et que je réalise plus tard. Et suit des travaux dans la plupart du temps. 

git revert commit-hash
git Push

git checkout my-other-branch
git revert revert-commit-hash
git Push
  1. annuler le commit 
  2. (créer et) commander une autre branche
  3. revenir le retour 
2
Mubashar Ahmad

Assurez-vous de sauvegarder vos modifications avant d'exécuter ces commandes dans un dossier séparé

git checkout branch_name

Commander sur votre succursale

fusion de git

Abandonner la fusion

statut git

Vérifier l'état du code après l'abandon de la fusion

git reset --hard Origin/nom_ branchement

ces commandes réinitialiseront vos modifications et aligneront votre code sur le code branch_name (branch). 

0
Mohit Singh

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

Allez à la fenêtre de contrôle de version ( Alt + 9 ) - Onglet "Journal" . Cliquez avec le bouton droit sur une livraison antérieure à votre dernière . .

Terminé.

Cela "désengagera" vos modifications (vous ne les perdez pas) et vous ramènera au point précédant votre dernier commit local.

0
Eduard Streltsov