Comment déplacer un commit vers la zone de préparation dans git?

143

Si vous voulez déplacer un commit vers la zone de préparation - c'est-à-dire le désactiver et déplacer tous les changements qui y étaient dans la zone de transfert (en mettant effectivement la branche dans l'état dans lequel elle se trouvait avant le commit) - comment faites-vous? Ou est-ce quelque chose que vous ne pouvez pas faire?

Le plus proche que je sache faire est de copier tous les fichiers qui ont été modifiés dans le commit ailleurs, de réinitialiser la branche sur le commit avant le commit que vous essayez de déplacer dans la zone de préparation, de déplacer tous les copié les fichiers dans le référentiel, puis ajoutez-les à la zone intermédiaire. Cela fonctionne, mais ce n'est pas vraiment une bonne solution. Ce que j'aimerais pouvoir faire, c'est simplement annuler le commit et déplacer sa modification dans la zone de préparation. Cela peut-il être fait? Et si oui, comment?

Jonathan M Davis
la source

Réponses:

267
git reset --soft HEAD^

Cela réinitialisera votre index sur HEAD^(le commit précédent) mais laissera vos modifications dans la zone de préparation.

Il y a des schémas pratiques dans la git-resetdocumentation

Si vous utilisez Windows, vous devrez peut-être utiliser ce format:

git reset --soft HEAD~1
Abizern
la source
18
Si cela ne fait rien, essayez git reset --soft HEAD~1ce qui signifie la même chose mais fonctionne également sous Windows.
Roman Starkov
9
Pour clarifier, tilde et carot signifient des choses différentes dans les versions git. HEAD ~ 1 suit toujours le premier parent d'un commit, ce qui peut ne pas être ce que vous voulez s'il s'agit d'un commit de fusion qui a plusieurs parents. Concernant le shell cmd Windows, il vous suffit d'échapper à la carotte avec une autre carotte par exemple "git reset --soft HEAD ^^" pour revenir à "HEAD ^". Ceci est purement un artefact du shell cmd Windows, vous ne devriez donc pas avoir à le faire si vous utilisez une interface graphique git sous Windows. Tilde et carot sont expliqués à schacon.github.io/git/git-rev-parse#_specifying_revisions
ahains
J'ai ajouté un lien pour les "diagrammes pratiques". Pourriez-vous vérifier rapidement si cela mène à la section que vous vouliez dire? Merci
Neuron
5

Une manière simple

  1. Fichiers validés dans la zone de transit

    git reset --soft HEAD^1

  2. Staging to UnStage : (utilisez "git reset HEAD ..." pour désinstaller)

    git reset HEAD git commands.txt or git reset HEAD *ds.txt

ici, * -> tous les fichiers se terminent par ds.txt pour désinstaller.

Reportez-vous à la photo ci-dessous pour plus de clarté:

entrez la description de l'image ici

Shiva Nandam Sirmarigari
la source