Mon problème est que j'ai changé un fichier, par exemple: README, ajouté une nouvelle ligne « ceci pour ma ligne de test » et enregistré le fichier, puis j'ai émis les commandes suivantes
git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: README
#
no changes added to commit (use "git add" and/or "git commit -a")
git add README
git commit -a -m 'To add new line to readme'
Je n'ai pas poussé le code vers github, maintenant je veux annuler ce commit.
Pour cela, j'ai utilisé
git reset --hard HEAD~1
Mais j'ai perdu la ligne nouvellement ajoutée « ceci pour ma ligne de test » du fichier README. Cela ne devrait pas arriver. J'ai besoin que le contenu soit là. Existe-t-il un moyen de conserver le contenu et d'annuler mon engagement local?
git
git-reset
git-commit
Amal Kumar S
la source
la source
git revert
, ce qui crée un nouveau commit avec la différence inverse du commit inversé. La réinitialisation pointe simplement votre branche actuelle vers un commit différent, dans ce cas, celui avant le commit que vous voulez "oublier".git-commit
pouvez abandonner si vous laissez le message vide, donc si vous n'avez pas réellement terminé la validation, cela pourrait être utile.Réponses:
Utilisez simplement
git reset
sans le--hard
drapeau:PS: Sur les systèmes basés sur Unix, vous pouvez utiliser
HEAD^
ce qui est égal àHEAD~1
. Sur WindowsHEAD^
ne fonctionnera pas car^
signale une continuation de ligne. Ainsi, votre invite de commande vous demandera simplementMore?
.la source
--mixed
dans le manuel .@^
de les raccourcirHEAD^
.Utiliser à la
--soft
place du--hard
drapeau:la source
git reset --soft HEAD^
supprimera le dernier commit local (non poussé) mais conservera les modifications que vous avezgit reset --soft HEAD~
sur les fenêtresSi vous êtes au milieu d'un commit (c'est-à-dire déjà dans votre éditeur), vous pouvez l'annuler en supprimant toutes les lignes au-dessus de la première
#
. Cela annulera le commit.Vous pouvez donc supprimer toutes les lignes pour que le message de validation soit vide, puis enregistrez le fichier:
Vous obtiendrez alors un message qui dit
Aborting commit due to empty commit message.
.MODIFIER :
Vous pouvez également supprimer toutes les lignes et le résultat sera exactement le même.
Pour supprimer toutes les lignes dans vim (si c'est votre éditeur par défaut), une fois que vous êtes dans l'éditeur, tapez
gg
pour aller à la première ligne, puisdG
pour supprimer toutes les lignes. Enfin, écrivez et quittez le fichier avecwq
et votre validation sera abandonnée.la source
rebase -i mybranchname
La première chose que vous devez faire est de déterminer si vous souhaitez conserver les modifications locales avant de supprimer le message de validation.
Utilisez
git log
pour afficher les messages de validation actuels, puis recherchez l'commit_id
avant avant la validation que vous souhaitez supprimer, et non la validation que vous souhaitez supprimer.Si vous souhaitez conserver les fichiers modifiés localement et supprimer simplement le message de validation:
git reset --soft commit_id
Si vous souhaitez supprimer tous les fichiers modifiés localement et le message de validation:
git reset --hard commit_id
C'est la différence du doux et du dur
la source
Vous pouvez dire à Git quoi faire avec votre index (ensemble de fichiers qui deviendront le prochain commit) et votre répertoire de travail lors de la réinitialisation de git en utilisant l'un des paramètres:
--soft
: Seules les validations seront réinitialisées, tandis que l'index et le répertoire de travail ne sont pas modifiés.--mixed
: Cela réinitialisera l'index pour qu'il corresponde à HEAD, tandis que le répertoire de travail ne sera pas touché. Toutes les modifications resteront dans le répertoire de travail et apparaîtront comme modifiées.--hard
: Il réinitialise tout (commits, index, répertoire de travail) pour correspondre à HEAD.Dans votre cas, j'utiliserais
git reset --soft
pour conserver vos modifications modifiées dans l'index et le répertoire de travail. Assurez-vous de vérifier ceci pour une explication plus détaillée.la source
Utilisez la commande ci-dessous:
Après cela, vous pouvez également afficher les fichiers qui reviennent comme ci-dessous la réponse.
la source