web-dev-qa-db-fra.com

Supprimer le commit sur gitlab

Comment puis-je supprimer un commit que j'ai fait sur GitLab? Ce commit que j’ai fait n’est pas le HEAD maintenant.

Si je ne peux pas le supprimer, puis-je le modifier?

Quand c'était la tête, j'ai essayé:

git reset  --soft HEAD

git reset  --soft HEAD^1

git revert HEAD

git rebase -i HEAD

git rebase -i HEAD~1

git reset --hard HEAD

git reset --hard Id-Code

J'ai déjà essayé de le rebaser, mais il reste toujours sur la branche. Maintenant, je viens de le retirer de la tête, mais il est toujours là.

Il y a une autre commande?

16
mhery

Supposons que vous avez le scénario suivant:

* 1bd2200 (HEAD, master) another commit
* d258546 bad commit
* 0f1efa9 3rd commit
* bd8aa13 2nd commit
* 34c4f95 1st commit

Où vous voulez supprimer d258546 c'est-à-dire "mauvais commit".

Vous devez essayer un rebase interactif pour le supprimer: git rebase -i 34c4f95

alors votre éditeur par défaut apparaîtra avec quelque chose comme:

 pick bd8aa13 2nd commit
 pick 0f1efa9 3rd commit
 pick d258546 bad commit
 pick 1bd2200 another commit

 # Rebase 34c4f95..1bd2200 onto 34c4f95
 #
 # Commands:
 #  p, pick = use commit
 #  r, reword = use commit, but edit the commit message
 #  e, edit = use commit, but stop for amending
 #  s, squash = use commit, but meld into previous commit
 #  f, fixup = like "squash", but discard this commit's log message
 #  x, exec = run command (the rest of the line) using Shell
 #
 # These lines can be re-ordered; they are executed from top to bottom.
 #
 # If you remove a line here THAT COMMIT WILL BE LOST.
 #
 # However, if you remove everything, the rebase will be aborted.
 #
 # Note that empty commits are commented out

supprimez simplement la ligne avec le commit que vous voulez déshabiller et enregistrez + quittez l'éditeur:

 pick bd8aa13 2nd commit
 pick 0f1efa9 3rd commit
 pick 1bd2200 another commit
 ...

git procédera pour supprimer ce commit de votre historique en laissant quelque chose comme ceci (attention au changement de hachage dans le descendant de commits du commit supprimé):

 * 34fa994 (HEAD, master) another commit
 * 0f1efa9 3rd commit
 * bd8aa13 2nd commit
 * 34c4f95 1st commit

Maintenant, puisque je suppose que vous avez déjà poussé le mauvais commit dans gitlab, vous devrez repousser votre graphique dans le référentiel (mais avec le -f option pour l’empêcher d’être rejetée en raison d’un historique non prédictible, c.-à-d. git Push -f <your remote> <your branch>)

Faites très attention et assurez-vous qu'aucun collègue n'utilise déjà l'historique contenant le "mauvais commit" dans ses branches.

Option alternative:

Au lieu de réécrire l'historique, vous pouvez simplement créer un nouveau commit qui annule les modifications introduites par votre mauvais commit. Pour ce faire, il vous suffit de taper git revert <your bad commit hash>. Cette option n'est peut-être pas aussi propre, mais elle est beaucoup plus sûre (au cas où vous ne seriez pas pleinement au courant de ce que vous feriez avec une base interactive).

27
Álvaro P.

1.git reset --hard CommitId

Maître 2.git Push -f Origin

La 1ère commande laissera votre tête à commitid et la 2ème commande supprimera toutes les validations après cet ID de validation sur la branche maître.

Note: N'oubliez pas d'ajouter -f dans Push sinon il sera rejeté.

17
ABHAY JOHRI

Nous avons eu un problème similaire et il ne suffisait pas de supprimer uniquement la validation et de forcer Push to GitLab.
Il était toujours disponible dans l'interface GitLab en utilisant l'URL:

https://gitlab.example.com/<group>/<project>/commit/<commit hash>

Nous avons dû supprimer le projet de GitLab et le recréer pour supprimer ce commit dans GitLab UI.

3
Tadeusz Kleszcz