Comment réinitialiser un référentiel Git distant pour supprimer tous les commits?

164

Comment puis-je réinitialiser un référentiel Git distant et local pour supprimer tous les commits?

Je voudrais repartir à zéro avec le Head actuel comme commit initial.

Priyank Bolia
la source
Je ne veux pas choisir ou faire quoi que ce soit d'autre, je veux simplement supprimer toutes les modifications et réinitialiser également le dépôt public. Comme je suis un nouvel utilisateur de Git, j'ai fait de faux commits. La suppression du répertoire .GIT n'est pas une option car il existe également un référentiel public.
Priyank Bolia
Vous pouvez également faire une poussée forcée, donc supprimer le répertoire .git est en fait une option.
Lilith River
2
juste pinailler, mais "révision" est une terminologie svn et n'a pas beaucoup de sens dans une histoire en forme d'arbre.
Tamás Szelei
2
@ TamásSzelei "Revision" est un synonyme parfaitement acceptable pour "commit". Il est utilisé à la fois dans le livre Pro Git (par exemple ici ) et dans les pages de manuel de Git.
jub0bs

Réponses:

348

Complètement réinitialisé?

  1. Supprimez le .gitrépertoire localement.

  2. Recréez le répertoire git:

    $ cd (project-directory)
    $ git init
    $ (add some files)
    $ git add .
    $ git commit -m 'Initial commit'
    
  3. Push vers le serveur distant, écrasement. N'oubliez pas que vous allez gâcher tout le monde en faisant cela… vous feriez mieux d'être le seul client.

    $ git remote add origin <url>
    $ git push --force --set-upstream origin master
    
Lilith River
la source
1
mais les validations ont disparu et le référentiel est réinitialisé. Pouvons-nous supprimer ces messages précédents également devant les noms de fichiers.
Priyank Bolia
2
Supprimez le référentiel distant directement sur GitHub et recréez-le là-bas.
Bombe
1
Devrait être git push --force au lieu de git push -force
William Notowidagdo
6
Si vous ne souhaitez pas valider de fichiers dans votre "validation initiale", vous ne pouvez tout simplement pas ajouter de fichiers et ajouter le --allow-emptydrapeau à la fin de git commit -m 'Initial commit'.
raf
2
Avec Git 2.3.2, j'ai dû utiliser git push --force --set-upstream origin masterMais tout le reste fonctionnait comme décrit
Sébastien Stormacq
6

Tout d'abord, suivez les instructions de cette question pour tout écraser en un seul commit. Ensuite, appuyez de force sur la télécommande:

$ git push origin +master

Et supprimez éventuellement toutes les autres branches à la fois localement et à distance:

$ git push origin :<branch>
$ git branch -d <branch>
R. Martinho Fernandes
la source
0

Si j'étais toi, je ferais quelque chose comme ça:

Avant de faire quoi que ce soit, veuillez en conserver une copie (mieux vaut prévenir que guérir)

git checkout master
git checkout -b temp 
git reset --hard <sha-1 of your first commit> 
git add .
git commit -m 'Squash all commits in single one'
git push origin temp

Après cela, vous pouvez supprimer d'autres branches.

Résultat: vous allez avoir une branche avec seulement 2 commits.

Utilisez git log --onelinepour voir vos commits d'une manière minimaliste et pour trouver SHA-1 pour les commits!

Kwnstantinos Nikoloutsos
la source