Je m'engage dans un dépôt git pour la première fois; Je regrette ensuite l'engagement et souhaite 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.
Cette validation est la première validation du référentiel. Une idée de comment annuler la validation initiale de git?
git status
je l' ai fait , et à ma grande surprise, git a ditfatal: Not a git repository (or any parent up to mount point ...)
!.gitignore
.git add .
,git commit -m "initial commit"
,git update-ref -D HEAD
, Créez un.gitignore
, notez que git est encore voir les fichiers qu'il a ajouté plus tôt qui devrait ignorer. En d'autres termes,git update-ref -d HEAD
cela ne m'a pas ramené à l'état avant le commit initial.git reset --hard HEAD~1
supprimerait les fichiers ajoutés pour toutes les autres validations. De toute évidence, la question est de savoir comment atteindre le même état que cette commande fonctionne dans tous les autres cas. Voir cet essentiel pour prouver que votre solution ne fonctionne pas gist.github.com/greggman/522fa69a21d6cfb3ff0bgit update-ref -d HEAD
ne nous revenions en fait la commettras initiale, mais conserve tous les changements précédemment ajoutés à l'commises index. Si vous souhaitez également supprimer ces modifications, exécutez simplement ce qui suitgit reset --hard
. Même si elle est incomplète, cette réponse est en effet la meilleure, donc évitez de l'utiliserrm -fr .git
(sauf si vous savez ce que vous faites).Vous pouvez supprimer le HEAD et restaurer votre référentiel dans un nouvel état, où vous pouvez créer un nouveau commit initial:
Après avoir créé un nouveau commit, si vous avez déjà poussé vers remote, vous devrez le forcer sur le remote pour écraser le commit initial précédent:
la source
Cette question a été liée à partir de ce billet de blog et une solution alternative a été proposée pour les nouvelles versions de Git:
Cette solution suppose que:
master
brancheold_master
donc je suis libre d'utiliser ce nomIl renommera la branche existante
old_master
et créera une nouvelle branche orphelinemaster
(comme elle est créée pour les nouveaux référentiels) après laquelle vous pouvez librement supprimerold_master
... ou non. Dépend de vous.Remarque: Le déplacement ou la copie d'une branche git préserve son reflog (voir ce code ) tout en supprimant puis en créant une nouvelle branche la détruit. Puisque vous souhaitez revenir à l'état d'origine sans historique, vous souhaiterez probablement supprimer la branche, mais d'autres voudront peut-être considérer cette petite note.
la source
Dans les conditions stipulées dans la question:
git init
,git add
opérations,git commit
,Si ces conditions préalables sont remplies, le moyen le plus simple d'annuler la validation initiale serait:
à partir du répertoire où vous l'avez fait
git init
. Vous pouvez ensuite refaire legit init
pour recréer le référentiel Git, et refaire les ajouts avec les modifications que vous avez regrettées de ne pas avoir faites la première fois, et refaire le commit initial.DANGER! Cela supprime le répertoire du référentiel Git.
Il supprime le répertoire du référentiel Git de manière permanente et irrécupérable, sauf si vous avez des sauvegardes quelque part. Dans les conditions préalables, vous n'avez rien que vous souhaitez conserver dans le référentiel, donc vous ne perdez rien. Tous les fichiers que vous avez ajoutés sont toujours disponibles dans les répertoires de travail, en supposant que vous ne les avez pas encore modifiés et que vous ne les avez pas supprimés, etc. Cependant, cela n'est sûr 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 pour la première fois - puis le regretter», c'est sûr. Très souvent, cependant, ce n'est pas sûr.
Il est également sûr de le faire pour supprimer un référentiel cloné indésirable; il n'endommage pas le référentiel à partir duquel il a été cloné. Il jette tout ce que vous avez fait dans votre copie, mais n'affecte pas autrement le référentiel d'origine.
Soyez prudent, mais il est sûr et efficace lorsque les conditions préalables sont remplies.
Si vous avez fait d'autres choses avec votre référentiel que vous souhaitez conserver, alors ce n'est pas la technique appropriée - votre référentiel ne remplit plus les conditions préalables pour que cela soit approprié.
la source
Tu ne peux pas. Donc:
la source
git reset --hard
, alors pourquoi le ferait-ilgit add -A
?Je vais ajouter ce qui a fonctionné pour moi à la fin. J'avais besoin de supprimer la validation initiale sur un référentiel car les données en quarantaine avaient été mal placées, la validation avait déjà été poussée.
Assurez-vous que vous êtes actuellement sur la bonne branche.
git checkout master
git update-ref -d HEAD
git commit -m "Initial commit
git push -u origin master
Cela a pu résoudre le problème.
Important
C'était sur un référentiel interne qui n'était pas accessible au public, si votre référentiel était accessible au public, supposez que tout ce dont vous avez besoin pour revenir en arrière a déjà été supprimé par quelqu'un d'autre.
la source
Je me demande pourquoi "modifier" n'est pas suggéré et a été barré par @damkrat, car amend me semble être la bonne façon de résoudre le plus efficacement le problème sous-jacent de corriger le mauvais commit car il n'y a pas de but de n'avoir aucune initiale commettre. Comme certains l'ont souligné, vous ne devez modifier la branche "publique" comme master que si personne n'a cloné votre dépôt ...
la source
git reset --hard faire des changements, puis faireou
et alors
--force réécrira le commit que vous avez réinitialisé à la première étape.Ne faites pas cela, car vous êtes sur le point d'aller à l'encontre de l'idée des systèmes VCS et de git en particulier. La seule bonne méthode consiste à créer une nouvelle branche et à la supprimer. Voir
git help branch
pour info.la source
Tout ce que vous avez à faire est d'annuler le commit.
Ensuite, poussez-le
la source