web-dev-qa-db-fra.com

Comment supprimer le premier commit dans git?

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?

104
Jian Weihang

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>
194
tzi

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

36
CharlesB

Départ dans une succursale temporaire:

git checkout --Orphan TEMP_BRANCH

Ajoutez tous les fichiers:

git add -A

Valider les modifications:

git commit -am "Commit initial"

Supprimer l'ancienne branche:

git branch -D master

Renommez la branche temporaire en maître:

git branch -m master

Enfin, forcez la mise à jour dans notre référentiel:

maître git Push -f Origin

5
Megha Sahu

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.

5
Max Beikirch

Une autre façon de faire est de:

  1. Commander dans une branche que vous souhaitez conserver (par exemple dev) git checkout dev
  2. Maintenant, supprimez la branche que vous souhaitez réinitialiser git branch -D master
  3. Maintenant, créez une branche vide portant le même nom 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.

2
kumar_harsh

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/
2
user1338062

Si vous venez de le commettre mais que vous ne l'avez pas poussé, supprimez simplement .git directory et git init à nouveau ...

0
Ali Sajid

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.

0
Mike Beaton