Puis-je supprimer un commit git mais conserver les modifications

Dans l’une de mes twigs de développement, j’ai apporté des modifications à mon code. Avant de pouvoir compléter les fonctionnalités sur lesquelles je travaillais, je devais passer ma twig actuelle à la version maître pour tester certaines fonctionnalités. Mais utiliser simplement un “git checkout master” a préservé les modifications que j’ai également apscopes à ma twig de développement, brisant ainsi certaines des fonctionnalités de master. Donc, ce que j’ai fait a été de valider les modifications sur ma twig de développement avec un message de validation “commit temporaire”, puis d’extraire le master de la démo.

Maintenant que j’ai fini avec la démo et que je retourne travailler sur ma twig de développement, je voudrais supprimer le “commit temporaire” que j’ai fait tout en conservant les modifications apscopes. Est-ce possible?

    C’est aussi simple que cela:

     git reset HEAD^ 

    git reset sans --hard ou --soft déplace votre HEAD pour pointer vers le commit spécifié, sans modifier aucun fichier. HEAD^ fait référence à la (première) validation de votre commit actuel, qui est dans votre cas la validation avant la validation temporaire.

    Notez qu’une autre option consiste à continuer normalement, puis à exécuter le prochain sharepoint validation:

     git commit --amend [-m … etc] 

    qui éditera à la place le commit le plus récent, ayant le même effet que ci-dessus.

    Notez que ceci (comme avec presque toutes les réponses de git) peut causer des problèmes si vous avez déjà poussé le mauvais engagement vers un endroit où quelqu’un d’autre l’a peut-être retiré. Essayez d’éviter cela

    Il y a deux façons de gérer cela. Ce qui est plus facile dépend de votre situation

    Réinitialiser

    Si le commit dont vous voulez vous débarrasser était le dernier commit, et que vous n’avez pas fait de travail supplémentaire, vous pouvez simplement utiliser git-reset

     git reset HEAD^ 

    Ramène votre twig à la validation juste avant votre HEAD actuel. Cependant, cela ne modifie pas réellement les fichiers de votre arbre de travail. Par conséquent, les modifications apscopes lors de cette validation apparaissent comme modifiées – c’est comme une commande «non validée». En fait, j’ai un pseudonyme pour faire exactement cela.

     git config --global alias.uncommit 'reset HEAD^' 

    Ensuite, vous pouvez simplement utiliser git uncommit à l’avenir pour sauvegarder un commit.

    Écrasement

    En écrasant un commit, vous combinez deux commits ou plus en un seul. Je le fais assez souvent. Dans votre cas, vous avez commis une fonctionnalité à moitié terminée, puis vous la terminez et vous vous engagez à nouveau avec le message de validation correct et permanent.

     git rebase -i  

    Je dis ci-dessus parce que je veux préciser que cela peut être n’importe quel nombre de commits. Lancez git log et trouvez le commit dont vous voulez vous débarrasser, copiez son SHA1 et utilisez-le à la place de . Git vous amènera au mode de rebase interactif. Il affichera tous les commits entre votre état actuel et ce que vous avez mis à la place de . Donc, si vaut 10 commits, cela vous montrera les 10 commits.

    Devant chaque engagement, il aura le pick du mot. Trouvez le commit dont vous voulez vous débarrasser et changez-le de pick à fixup ou squash . Utiliser le fixup élimine simplement le message de validation et fusionne les modifications dans son prédécesseur immédiat dans la liste. Le mot clé squash fait la même chose, mais vous permet d’éditer le message de validation du commit nouvellement combiné.

    Notez que les commits seront ré-validés dans l’ordre où ils apparaissent dans la liste lorsque vous quittez l’éditeur. Donc, si vous avez effectué une validation temporaire, puis que vous avez travaillé sur la même twig et que vous avez terminé la fonctionnalité dans une validation ultérieure, l’utilisation de rebase vous permettra de reclasser les validations et de les écraser.

    ATTENTION:

    Le remaniement modifie l’historique: ne le faites PAS sur les commits que vous avez déjà partagés avec d’autres développeurs.

    Se cacher

    À l’avenir, pour éviter ce problème, envisagez d’utiliser git stash pour stocker temporairement le travail non engagé.

     git stash save 'some message' 

    Cela stockera vos modifications actuelles sur le côté dans votre liste de réserve. Ci-dessus est la version la plus explicite de la commande stash, permettant à un commentaire de décrire ce que vous cachez. Vous pouvez aussi simplement lancer git stash et rien d’autre, mais aucun message ne sera stocké.

    Vous pouvez parcourir votre liste de réserve avec …

     git stash list 

    Cela vous montrera tous vos stashes, quelles twigs ils ont été faites, et le message et au début de chaque ligne, et l’identifiant de ce stash qui ressemble à ce stash@{#} où # est sa position dans le tableau des stashes .

    Pour restaurer une réserve (ce qui peut être fait sur n’importe quelle twig, quel que soit l’endroit où la réserve a été créée), il vous suffit de lancer …

     git stash apply stash@{#} 

    Là encore, il y a # la position dans le tableau des stashes. Si le cache que vous souhaitez restaurer est à la position 0 , c’est-à-dire s’il s’agit de la cachette la plus récente. Ensuite, vous pouvez simplement exécuter la commande sans spécifier la position de réserve, git supposera que vous voulez dire la dernière: git stash apply .

    Ainsi, par exemple, si je travaille sur la mauvaise twig, je peux exécuter la séquence de commandes suivante.

     git stash git checkout  git stash apply 

    Dans votre cas, vous avez déplacé les twigs un peu plus, mais la même idée s’applique toujours.

    J’espère que cela t’aides.

    Oui, vous pouvez supprimer votre commit sans supprimer les modifications: git reset @ ~

    Je pense que vous cherchez ceci

    réinitialiser git –soft HEAD ~ 1

    cela vous amènera au précédent engagement et conservera les modifications que vous avez apscopes.

    Dans mon cas, je suis déjà passé au repo. Aie!

    Vous pouvez annuler une validation spécifique tout en conservant les modifications apscopes à vos fichiers locaux en procédant comme suit:

     git revert -n  

    De cette façon, j’ai pu conserver les modifications dont j’avais besoin et annuler un commit qui avait déjà été poussé.

    En utilisant git 2.9 (précisément 2.9.2.windows.1), git reset HEAD^ demande plus; Je ne suis pas sûr de ce qui est attendu ici. S’il vous plaît se référer ci-dessous capture d’écran

    entrer la description de l'image ici

    Autre solution trouvée git reset HEAD~#numberOfCommits utilisant lequel nous pouvons choisir de sélectionner le nombre de commits locaux que vous souhaitez réinitialiser en conservant vos modifications intactes. Par conséquent, nous avons la possibilité de jeter tous les commits locaux ainsi qu’un nombre limité de commits locaux.

    Reportez-vous aux captures d’écran ci-dessous montrant git reset HEAD~1 en action: entrer la description de l'image ici

    entrer la description de l'image ici

    Une autre façon de le faire.

    Ajoutez commit en haut de commit temporaire, puis faites:

     git rebase -i 

    Pour fusionner deux commits en un seul (la commande ouvrira un fichier texte avec des instructions explicites, modifiez-le).

    Pour ceux qui utilisent zsh, vous devrez utiliser les éléments suivants:

    git reset --soft HEAD\^

    Expliqué ici: https://github.com/robbyrussell/oh-my-zsh/issues/449

    Dans le cas où l’URL deviendrait mort, la partie importante est la suivante:

    Escape the ^ dans votre commande

    Vous pouvez également utiliser HEAD ~ pour que vous n’ayez pas à y échapper à chaque fois.