Comment débloquer mon dernier commit en Git [dupliquer]
cette question a déjà une réponse ici:
Comment puis-je débloquer mon dernier engagement en git?
Est-il
git reset --hard HEAD
ou
git reset --hard HEAD^
?
8 réponses
si vous n'êtes pas tout à fait sûr de ce que vous voulez dire par" uncommit "et ne savez pas si vous voulez utiliser git reset
, s'il vous plaît voir " revenir à une précédente git commit ".
Si vous êtes à essayer de comprendre les "151930920 de" mieux voir " Pouvez-vous expliquer ce "git reset" n'en anglais? ".
si vous savez que vous voulez utiliser git reset
, cela dépend encore ce que vous dire par "uncommit". Si tout ce que vous voulez faire est d'annuler l'acte de commettre, en laissant tout le reste intact, utilisez:
git reset --soft HEAD^
si vous voulez annuler l'acte de commettre et tout ce que vous avez mis en scène, mais laissez l'arbre de travail (vos fichiers intacts):
git reset HEAD^
et si vous voulez réellement complètement annuler, jeter tous les changements non engagés, Tout réinitialiser à la précédente commettre (comme l'original de la question posée):
git reset --hard HEAD^
la question originale demandait aussi HEAD^
et non HEAD
. HEAD
se réfère à la commit courante - généralement, la pointe de la branche actuellement cochée. Le ^
est une notation qui peut être attachée à n'importe quel spécificateur de propagation, et signifie"la propagation avant". Ainsi, HEAD^
est le commit avant le l'actuel, tout comme master^
est le commit avant la pointe de la branche principale.
Voici la partie de la git-rev-parse documentation décrivant toutes les façons de spécifier les commits ( ^
est juste un de base parmi beaucoup).
conserver les modifications à partir de la validation que vous souhaitez annuler
git reset --soft HEAD^
Pour détruire les modifications à partir de la validation que vous souhaitez annuler
git reset --hard HEAD^
vous pouvez aussi dire
git reset --soft HEAD~2
pour revenir 2 s'engage.
Edit: comme charsi l'a mentionné, si vous êtes sur Windows, vous devrez mettre HEAD ou commit hash entre guillemets.
git reset --soft "HEAD^"
git reset --soft "asdf"
git reset --soft HEAD^
conservera les modifications dans votre arbre de travail.
git reset --hard HEAD^
VA JETER LES CHANGEMENTS QUE VOUS AVEZ FAIT !!!
soyez prudent, reset --hard
supprimera aussi vos modifications locales (non engagées).
git reset --hard HEAD^
note: si vous êtes sur windows, vous aurez besoin de citer la tête^ so
git reset --hard "HEAD^"
juste une note - si vous utilisez ZSH et voir l'erreur
zsh: no matches found: HEAD^
vous devez échapper à la ^
git reset --soft HEAD\^
si vous n'avez pas encore poussé vos modifications, utilisez git reset --soft [Hash for one commit]
pour revenir à un commit spécifique. --soft
dit à git de garder les changements étant reconduits (i.e., marquer les fichiers tels que modifiés). --hard
dit à git de supprimer les modifications en cours de révision.
si vous vous engagez dans la mauvaise branche
sur la mauvaise branche:
-
git log -2
vous donne des hachures de 2 dernières propagations, permet de dire$prev
et$last
-
git checkout $prev
checkout corriger commettre -
git checkout -b new-feature-branch
crée une nouvelle branche pour la caractéristique -
git cherry-pick $last
patchs une branche avec vos modifications
alors vous pouvez suivre une des méthodes suggérées ci-dessus pour supprimer votre propagation de la première branche.
faites attention avec ça.
mais vous pouvez utiliser la commande rebase
git rebase -i HEAD~2
A vi
s'ouvrira et tout ce que vous avez à faire est de supprimer la ligne avec la propagation. Peut également lire des instructions qui a été montré dans l'édition appropriée @ vi
, un couple de choses peuvent être effectuées sur ce mode