Je suis curieux de savoir comment supprimer le premier commit dans git.
Quelle est la révision avant de commettre quoi que ce soit? Cette révision a-t-elle un nom ou une étiquette?
git
repository
commit
git-commit
Jian Weihang
la source
la source
git rebase -i --root
. Voir la réponse SO suivante pour plus de détails: stackoverflow.com/questions/2246208/…git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD
Réponses:
Pour moi, le moyen le plus sûr est d'utiliser la
update-ref
commande:Il supprimera la référence nommée
HEAD
, donc il réinitialisera (doucement, vous ne perdrez pas votre travail) tous vos commits de votre branche actuelle .Si vous souhaitez fusionner le premier commit avec le second, vous pouvez utiliser la
rebase
commande:Un dernier moyen pourrait être de créer une branche orpheline, une branche avec le même contenu mais sans historique de commit, et de valider votre nouveau contenu dessus:
la source
Il n'y a rien avant le premier commit, car chaque commit fait référence à un commit parent. Cela rend le premier commit spécial (un commit orphelin), il n'y a donc aucun moyen de faire référence à un "état" précédent.
Donc, si vous voulez corriger le commit, vous pouvez simplement
git commit --amend
: cela modifiera le commit sans en créer un autre.Si vous voulez simplement tout recommencer, supprimez le
.git
référentiel et créez-en un autre avecgit init
la source
--amend
plus, l'auteur ne mettra pas à jour correctement s'il était initialement mal configuré. C'est ce dont j'avais besoin, alors j'ai utilisé la réponse acceptée, puis j'ai simplement fait un nouveau commit à la place.la source
Vous voudrez peut-être simplement modifier votre premier commit (car il y a toujours un premier commit dans un dépôt git). Pensez à utiliser
git commit --amend --reset-author
plutôt que d'habitudegit commit --amend
.la source
Je cherchais un moyen d'annuler tous les commits git d'un repo, comme s'ils ne s'étaient jamais produits.
La réinitialisation fonctionnera jusqu'à un certain point. Cependant, le tout premier (chronologiquement le plus ancien commit git) sera toujours problématique, car il n'a pas de parent, ce qui entraînera une erreur.
Aucune de ces réponses ne l'a résolu pour moi. Mais après de nombreuses recherches et essais et erreurs, j'ai trouvé que cela fonctionnait!
J'espère que cela vous aide. Passez une bonne journée.
la source
Une autre façon de procéder est:
git checkout dev
git branch -D master
git checkout --orphan master
Bien sûr, tout cela dépendra de votre cas d'utilisation, mais si vous avez plus d'une branche, la suppression du
.git
répertoire n'a pas de sens.la source
Si vous souhaitez conserver d'autres branches, mais par exemple faire
master
redémarrer la branche sans historique commun aux autres branches, un moyen sûr d'y parvenir est de créer un nouveau référentiel et d'en pousser le contenu dans l'ancien:Cela crée une
newmaster
branche dans l'ancien référentiel, avec un historique qui n'est commun à aucune des autres branches. Bien sûr, vous pouvez également remplacer le fichiermaster
avecgit push -f
.Si vous souhaitez détruire toutes les branches et tout le contenu existant, exécutez simplement
la source
git rebase --root
c'est probablement ce que OP voulait, mais étant donné que cette réponse a deux votes positifs, je m'abstiendrai de la supprimer au cas où quelqu'un la trouverait toujours pertinente.Si vous venez de le valider mais que vous ne l'avez pas poussé, supprimez simplement le répertoire .git et
git init
encore une fois ...la source
La réponse à la question dépend de si:
Vous voulez supprimer le premier ET UNIQUEMENT commit sur une branche (tout en laissant les autres branches telles qu'elles étaient), ou si
Vous voulez supprimer le premier commit sur une branche, tout en «laissant en place» les commits suivants (et les autres branches).
Le second est relativement plus simple. Vous devez essentiellement rebase à la racine - la plupart des réponses ici concernent les moyens de le faire.
Faire le second (supprimer le premier et le seul commit d'une branche tout en laissant les autres branches seules) est plus difficile. Ou, du moins, particulièrement plus difficile si vous voulez que cela se produise et que le changement soit reflété dans GitHub ou Bitbucket. Il n'y a (pour autant que je sache) aucun moyen du tout dans Git de pousser ou de forcer à pousser une branche sans commits. Et il n'y a pas non plus (encore une fois, pour autant que je sache) aucun moyen de créer une nouvelle branche vide sans commits dans GitHub ou Bitbucket. Donc, vous devez essentiellement créer un nouveau référentiel afin de créer une branche complètement vide, puis rajouter les branches que vous voulez (y compris les commits que vous voulez) - selon la réponse de @ user1338062.
J'espère donc que cette réponse clarifie ce qui n'aurait peut-être pas été évident - qu'il y a deux approches différentes à adopter, pour deux scénarios différents (plus ou moins raisonnables) qui sont les deux choses que vous voudrez peut-être être en mesure de faire, dans l'ordre pour maîtriser pleinement ce que le PO demande.
la source