Comment rétablir les initiales git commit?

Je m’engage dans un repository git pour la première fois; Je regrette alors le commit et je veux le revenir. J’essaie

# git reset --hard HEAD~1 

Je reçois ce message:

 fatal: ambiguous argument 'HEAD~1': unknown revision or path not in the working tree. 

Ce commit est le premier commit du référentiel. Avez-vous une idée de comment annuler la validation initiale de git?

Il vous suffit de supprimer la twig sur laquelle vous vous trouvez. Vous ne pouvez pas utiliser git branch -D car cela a un contrôle de sécurité. Vous pouvez utiliser update-ref pour cela.

 git update-ref -d HEAD 

N’utilisez pas rm -rf .git ou quelque chose comme ça car cela effacerait complètement votre référentiel entier, y compris toutes les autres twigs, ainsi que la twig que vous essayez de réinitialiser.

Vous pouvez supprimer le HEAD et restaurer votre référentiel dans un nouvel état, où vous pouvez créer une nouvelle validation initiale:

 git update-ref -d HEAD 

Après avoir créé une nouvelle validation, si vous avez déjà effectué une transmission à distance, vous devrez la forcer à la télécommande pour remplacer la validation initiale précédente:

 git push --force origin 

Cette question était liée à cet article de blog et une solution alternative a été proposée pour les nouvelles versions de Git:

 git branch -m master old_master git checkout --orphan master git branch -D old_master 

Cette solution suppose que:

  1. Vous n’avez qu’un seul engagement sur votre twig master
  2. Il n’y a pas de twig appelée old_master donc je suis libre d’utiliser ce nom

Il renommera la twig existante en old_master et créera un nouveau master twig orphelin (comme s’il était créé pour les nouveaux repositorys), après quoi vous pourrez librement supprimer old_master … ou non. Dépend de vous.

Remarque: Le déplacement ou la copie d’une twig git préserve son renvoi (voir ce code ) lors de la suppression puis la création d’une nouvelle twig le détruit. Puisque vous voulez revenir à l’état d’origine sans historique, vous souhaiterez probablement supprimer la twig, mais d’autres voudront peut-être considérer cette petite note.

Le moyen le plus simple serait:

 rm -fr .git 

depuis le répertoire où vous avez effectué git init .

Vous n’avez rien que vous voulez garder, alors vous ne perdez rien. Cependant, cette opération n’est sûre que si vous n’avez rien d’autre dans votre référentiel. Dans les circonstances décrites dans la question “Valider le référentiel la première fois – puis le regretter”, la procédure est sûre. Très souvent, cependant, ce n’est pas sûr.

Vous ne pouvez pas Alors:

 rm -rf .git/ git init git add -A git commit -m 'Your new commit message' 

git reset –hard apporte des modifications, puis fait

 git add -A git commit --amend --no-edit 

ou

 git add -A git commit --amend -m "commit_message" 

et alors

 git push origin master --force 

–force réécrira que vous avez réinitialisé lors de la première étape.

Ne faites pas cela, car vous êtes sur le point d’aller à l’encontre de l’idée de systèmes VCS et de git en particulier. La seule bonne méthode consiste à créer un nouveau et supprimer une twig inutile. Voir la git help branch pour plus d’informations.

Tout ce que vous avez à faire est de revenir sur le commit.

 git revert {commit_id}' 

Alors poussez

 git push origin -f