Je suis curieux de savoir comment supprimer le premier commit dans git.
Quelle est la révision avant de commettre quelque chose? Cette révision a-t-elle un nom ou une étiquette?
Pour moi, le moyen le plus sûr est d'utiliser la commande update-ref
:
git update-ref -d HEAD
Il supprimera la référence nommée HEAD
, ainsi il réinitialisera (doucement, vous ne perdrez pas votre travail) tous vos commits de votre branche actuelle .
Si vous voulez fusionner le premier commit avec le second, vous pouvez utiliser la commande rebase
:
git rebase -i --root
Une dernière solution pourrait être de créer une branche orpheline, une branche avec le même contenu mais sans historique de validation, et de valider votre nouveau contenu:
git checkout --Orphan <new-branch-name>
Il n'y a rien avant le premier commit, car chaque commit renvoie à 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 réparer le commit, vous pouvez simplement git commit --amend
: cela modifiera le commit sans en créer un autre.
Si vous voulez juste tout recommencer, supprimez le référentiel .git
et créez-en un autre avec git init
git checkout --Orphan TEMP_BRANCH
git add -A
git commit -am "Commit initial"
git branch -D master
git branch -m master
maître git Push -f Origin
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
au lieu du git commit --amend
habituel.
Une autre façon de faire est de:
git checkout dev
git branch -D master
git checkout --Orphan master
Bien sûr, tout cela dépend de votre cas d'utilisation, mais si vous avez plusieurs branches, la suppression du répertoire .git
n'a pas de sens.
Si vous souhaitez conserver d'autres branches, mais que, par exemple, vous redémarriez la branche master
sans créer d'historique commun à d'autres branches, vous pouvez créer un nouveau référentiel en toute sécurité.
cd ..
git init newrepo
cd newrepo
# make some initial commits
git Push ../oldrepo master:newmaster
Cela crée une branche newmaster
dans l'ancien référentiel, avec un historique qui n'est commun à aucune des autres branches. Bien sûr, vous pouvez simplement écraser la master
avec git Push -f
.
Si vous voulez détruire toutes les branches et tout le contenu existant, lancez simplement
rm -rf .git/
Si vous venez de le commettre mais que vous ne l'avez pas poussé, supprimez simplement .git directory et git init
à nouveau ...
La réponse à la question dépend de si:
Vous voulez supprimer le premier ET UNIQUEMENT commettre sur une branche (tout en laissant les autres branches telles quelles), ou si
Vous voulez supprimer le premier commit sur une branche, tout en "laissant en place" les commits suivants (et les autres branches).
La seconde est relativement plus simple. Vous devez essentiellement vous baser sur la racine - la plupart des réponses ici concernent des façons de le faire.
Faire la seconde (supprimer la première et seule commettre d'une branche tout en laissant les autres branches seules) est plus difficile. Ou du moins, particulièrement difficile si vous voulez que cela se produise et que le changement soit reflété dans GitHub ou Bitbucket. Autant que je sache, Git n'a aucun moyen de pousser ou de forcer une branche sans commettre. Et il est également (à ma connaissance, également impossible) de créer une nouvelle branche vide sans validation dans GitHub ou Bitbucket. Vous devez donc essentiellement créer un nouveau référentiel afin de créer une branche complètement vide, puis rajouter les branches souhaitées (y compris les commits souhaités) - conformément à la réponse de @ user1338062.
J'espère donc que cette réponse clarifie ce qui aurait pu ne pas être é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 pouvoir faire. faire, afin de maîtriser parfaitement ce que le PO demande.