Comment débloquer un commit git local

Mon problème est que j'ai changé le fichier, par exemple: LISEZMOI, ajouté une nouvelle ligne «ceci est pour ma ligne de test» et enregistré le fichier, puis j'ai publié 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 appuyé sur le code sur github, maintenant je veux annuler ce commit.

Pour cela, j'ai utilisé

  git reset --hard HEAD~1 

Mais j’ai perdu la nouvelle ligne «ceci est pour ma ligne de test» du fichier README. Cela ne devrait pas être. J'ai besoin du contenu pour être là. Existe-t-il un moyen de sauvegarder le contenu et d'annuler mon commit local?

560
31 янв. fixé par Amal Kumar S le 31 janvier 2011-01-31 15:14 '11 à 15:14 2011-01-31 15:14
@ 7 réponses

Utilisez simplement git reset sans le drapeau --hard :

 git reset HEAD~1 

PS: Sur les systèmes Unix, vous pouvez utiliser HEAD^ , qui est HEAD~1 . Sous Windows, HEAD^ ne fonctionnera pas car ^ indique la continuation de la ligne. Alors, votre invite de commande vous demande- More? .

1085
31 янв. La réponse est donnée à Koraktor le 31 janvier 2011-01-31 15:17 '11 à 15:17 2011-01-31 15:17

Utilisez --soft au lieu de --hard flag:

border=0
 git reset --soft HEAD^ 
143
10 авг. La réponse est donnée TpED 10 août. 2012-08-10 11:02 '12 à 11:02 am 2012-08-10 11:02

Si vous êtes au milieu d’un commit (c’est-à-dire déjà dans l’éditeur), vous pouvez l’annuler en supprimant toutes les lignes au-dessus du premier # . Cela va interrompre le commit.

Ainsi, vous pouvez supprimer toutes les lignes pour que le message de validation soit vide, puis enregistrer le fichier:

2019

Vous pouvez dire à Git quoi faire avec votre index (l'ensemble des fichiers qui deviendront le prochain commit) et le répertoire de travail lors de la réinitialisation de Git à l'aide de l'un des paramètres:

--soft : seules les --soft seront réinitialisées et l'index et le répertoire de travail ne seront pas modifiés.

--mixed : cela réinitialisera l'index en fonction de l'en-tête et le répertoire de travail ne sera pas affecté. Toutes les modifications resteront dans le répertoire de travail et apparaîtront modifiées.

--hard : réinitialise tout (commits, index, répertoire de travail) en fonction de l'en-tête.

Dans votre cas, j'utiliserais git reset --soft pour enregistrer 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.

5
29 мая '18 в 13:22 2018-05-29 13:22 la réponse est donnée par Nesha Zoric le 29 mai '18 à 13h22. 2018-05-29 13:22

La première chose à faire est de savoir si vous souhaitez enregistrer les modifications locales avant de supprimer le message de validation.

Utilisez git log pour afficher les messages de validation actuels, puis recherchez commit_id avant de supprimer, et pas uniquement celui que vous souhaitez supprimer.

Si vous souhaitez enregistrer des fichiers modifiés localement, supprimez 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

Quelle est la différence est douce et dure

2
02 сент. la réponse est donnée mistdon 02 sep . 2018-09-02 06:43 '18 à 6:43 2018-09-02 06:43

Utilisez la commande ci-dessous: $ git reset HEAD ~ 1 Ensuite, vous pouvez également afficher les fichiers renvoyés, comme indiqué ci-dessous.

Modifications non définies après réinitialisation: M application / config / config.php M application / config / database.php

1
14 мая '18 в 16:25 2018-05-14 16:25 la réponse est donnée à Omkar le 14 mai '18 à 16h25 . 2018-05-14 16:25

Différence entre git reset --mixed, --soft et --hard

Condition préalable: lorsqu'une modification est apportée à un fichier existant dans votre référentiel, cette modification est initialement considérée comme non spécifiée. Pour valider les modifications, vous devez le préparer, ce qui signifie l'ajouter à l'index à l'aide de git add . Lors de la validation, les fichiers placés sont ajoutés à l’index.

Prenons un exemple:

 - A - B - C (master) 

HEAD indique C et l'indice correspond à C

--soft

  • Lorsque nous effectuons une git reset --soft B afin de supprimer la validation C et de pointer le principal / HEAD sur B.
  • Master / HEAD va maintenant pointer sur B, mais l' index est toujours changé de C.
  • Lors de l'exécution de git status fichiers indexés dans la validation C étaient échelonnés .
  • Lancer git commit à ce stade va créer un nouveau commit avec les mêmes modifications qu'en C

--mé>
  • Exécuter git reset --mixed B
  • Lors de l'exécution, maître / HEAD pointe vers B et l' index change également pour correspondre à B en raison de l'indicateur mixte utilisé.
  • Si à ce moment nous exécutons git commit, rien ne se passera, car l' index correspond à HEAD .
  • Nous avons toujours des modifications dans le répertoire de travail, mais comme elles ne sont pas dans l'index, l' état de git les indique non capturées
  • Pour les corriger, vous devez git add , puis corriger comme d'habitude.

- dur

  • Exécuter git reset --hard B
  • Lors de l'exécution maître / HEAD pointera sur B et changera votre répertoire de travail
  • Les modifications ajoutées à C et toutes les modifications non validées seront supprimées .
  • Les fichiers de la copie de travail correspondront à la validation B, ce qui entraînera la perte de toutes les modifications apportées à la validation C, ainsi que des modifications non validées.

J'espère que la comparaison des indicateurs disponibles pour une utilisation avec la commande git reset aidera quelqu'un à les utiliser judicieusement. Contactez-les pour plus d'informations link1 link2

0
18 янв. La réponse est donnée par Keshan Nageswaran le 18 janvier 2019-01-18 19:48 '19 à 19:48 2019-01-18 19:48

Autres questions sur les tags ou Poser une question