Supprimer commits d'une branche dans Git

voix
2k

Je voudrais savoir comment supprimer une validation.

Par delete, je veux dire qu'il est comme si je ne faisais pas ce commit, et quand je fais un coup de pouce à l'avenir, mes changements ne pousserai pas à la branche à distance.

Je lis l' aide git, et je pense que la commande que je devrais utiliser est git reset --hard HEAD. Est-ce correct?

Créé 27/08/2009 à 04:39
source utilisateur
Dans d'autres langues...                            


27 réponses

voix
3k

Attention: git reset --hard SUPPRIMERA vos modifications RÉPERTOIRE DE TRAVAIL . Assurez - vous de cacher les changements locaux que vous souhaitez conserver avant d' exécuter cette commande.

En supposant que vous êtes assis sur cette commettras, cette commande sera wack il ...

git reset --hard HEAD~1

Les HEAD~1moyens de la tête avant de commettre.

Ou bien , vous pouvez regarder la sortie git log, trouver le commettras id de vous engager à sauvegarder, et puis faire ceci:

git reset --hard <sha1-commit-id>

Si vous avez déjà poussé, vous aurez besoin de faire une poussée de force pour se débarrasser de lui ...

git push origin HEAD --force

Toutefois , si d' autres ont tiré, vous serez alors en mieux commencer une nouvelle branche. Parce que quand ils tirent, il va juste se fondre dans leur travail, et vous l' obtenir repoussé à nouveau.

Si vous avez déjà poussé, il peut être préférable d'utiliser git revert, pour créer une « image miroir » commit qui annuler les modifications. Cependant, les deux commits seront dans le journal.


Pour votre information - git reset --hard HEADest grand si vous voulez vous débarrasser des travaux en cours. Il vous réinitialisé à la dernière validation, et d' effacer tous les changements dans votre arbre de travail et de l' index.


Enfin, si vous avez besoin de trouver un vous engagerez que « supprimé », il est généralement présent à git reflogmoins que vous ayez des ordures collectées votre dépôt.

Créé 27/08/2009 à 04:44
source utilisateur

voix
588

Si vous ne l' avez pas encore poussé la commettras nulle part, vous pouvez utiliser git rebase -ipour supprimer cette commettras. Tout d' abord, savoir comment loin en arrière qui commettent est (environ). Alors fais:

git rebase -i HEAD~N

Les ~Nmoyens les derniers rebasage Ncommits ( Ndoit être un nombre, par exemple HEAD~10). Ensuite, vous pouvez modifier le fichier que Git vous présente supprimer l'infraction commise. Lors de la sauvegarde de ce fichier, Git alors réécrire tous les commits suivants comme si celui que vous avez supprimé n'existait pas.

Le livre Git a une bonne section sur rebasage avec des images et des exemples.

Soyez prudent avec ce bien, parce que si vous changez quelque chose que vous avez poussé ailleurs, une autre approche est nécessaire à moins que vous envisagez de faire une poussée de force.

Créé 27/08/2009 à 04:51
source utilisateur

voix
406

Une autre possibilité est l'un de mes commandes favorites personnelles:

git rebase -i <commit>~1

Cela démarrera le rebasage en mode interactif -iau point juste avant la commettras vous voulez frapper. L'éditeur démarrera la liste de tous les commits depuis. Supprimez la ligne contenant le commettras vous voulez effacer et enregistrer le fichier. Rebasage fera le reste du travail, la suppression de seulement commettre, et rejouant tous les autres de nouveau dans le journal.

Créé 27/08/2009 à 04:49
source utilisateur

voix
276

J'annexant cette réponse parce que je ne vois pas pourquoi quelqu'un qui a juste essayé de commettre le travail voudrait supprimer tout ce travail en raison d'une erreur en utilisant Git!

Si vous voulez garder votre travail et juste « annuler » qui commettent commande (vous avez pris avant de pousser à repo):

git reset --soft HEAD~1

Ne pas utiliser le --hard drapeau , sauf si vous voulez détruire votre travail en cours depuis la dernière validation.

Créé 15/10/2012 à 19:17
source utilisateur

voix
46

Si vous n'avez pas publié des modifications, de supprimer le dernier commit, vous pouvez faire

$ git reset --hard HEAD^

(Notez que cela supprimerait aussi tous les changements non engagés, à utiliser avec précaution).

Si vous avez déjà publié à être supprimé-commit, l' utilisation revert git

$ git revert HEAD
Créé 27/08/2009 à 11:47
source utilisateur

voix
40

Suppression d'un ensemble commit

git rebase -p --onto SHA^ SHA

Il est évident que remplacer « SHA » avec la référence que vous voulez vous débarrasser. Le « ^ » dans cette commande est littérale.

http://sethrobertson.github.io/GitFixUm/fixup.html

Créé 31/08/2015 à 19:36
source utilisateur

voix
31
git reset --hard commitId

git push <origin> <branch> --force

PS: CommitId renvoie celui que vous souhaitez revenir à

Créé 16/10/2014 à 10:51
source utilisateur

voix
29

Si vous voulez réparer votre dernier commit, vous pouvez annuler la commettras et désindexer les fichiers qu'il contient, en faisant:

git reset HEAD~1

Cela renverra votre dépôt à son état avant la git ajouter les commandes mises en scène les fichiers. Vos changements seront dans votre répertoire de travail. HEAD ~ 1 fait référence au commettras dessous de la pointe actuelle de la branche.

Si vous voulez uncommit N engage, mais conserver les modifications de code dans votre répertoire de travail:

git reset HEAD~N

Si vous voulez vous débarrasser de votre dernier commettez et ne souhaitez pas conserver les modifications de code, vous pouvez faire un « dur » reset.

git reset --hard HEAD~1

De même, si vous voulez jeter le dernier N engage, et ne veulent pas conserver les modifications du code:

git reset --hard HEAD~N
Créé 31/05/2014 à 08:19
source utilisateur

voix
19

Historique des modifications avec force

En supposant que vous ne voulez pas simplement supprimer le dernier commit, mais que vous souhaitez supprimer commits spécifiques du dernier n commits, aller avec:

git rebase -i HEAD~<number of commits to go back>, Donc git rebase -i HEAD~5si vous voulez voir les cinq derniers commits.

Puis , dans l'éditeur de texte changer le mot pickà dropcôté de tous les commits que vous souhaitez supprimer. Sauvegardez et quittez l'éditeur. Le tour est joué!

Additivement Historique des modifications

Essayez git revert <commit hash>. Revert créera un nouveau commit qui annule la spécifiée commettras.

Créé 15/06/2017 à 23:01
source utilisateur

voix
15

Disons que nous voulons supprimer commits 2 et 4 de la pension.

commit 0 : b3d92c5
commit 1 : 2c6a45b
commit 2 : <any_hash>
commit 3 : 77b9b82
commit 4 : <any_hash>

Remarque: Vous devez avoir des droits d' administrateur sur le repo depuis que vous utilisez --hardet -f.

  • git checkout b3d92c5 Passer la commande dernière utilisable commettras.
  • git checkout -b repair Créer une nouvelle branche pour travailler.
  • git cherry-pick 77b9b82 Exécuter engager à 3.
  • git cherry-pick 2c6a45b Exécuter engager à 1.
  • git checkout master maître de votre commande.
  • git reset --hard b3d92c5 Réinitialiser maître dernier commettras utilisable.
  • git merge repair Fusionner notre nouvelle branche sur maître.
  • git push -f origin master Pousser maître vers le repo distant.
Créé 05/09/2017 à 07:19
source utilisateur

voix
14
git rebase -i HEAD~2

Ici, « 2 » est le nombre de commits que vous voulez rebasage.

'git rebase -i HEAD`

si vous voulez rebasage tous les commits.

Ensuite, vous pourrez choisir une de ces options.

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

d, drop = remove commit

Ces lignes peuvent être commandés; elles sont exécutées de haut en bas. Si vous supprimez une ligne ici que Livrer PERDUS. Toutefois, si vous supprimez tout, le rebasage sera annulée. Notez que commits vides sont commentées

Vous pouvez simplement supprimer en utilisant l'option qui allouent « d » ou suppression d'une ligne qui a votre livraison.

Créé 18/05/2016 à 23:39
source utilisateur

voix
11

Pour supprimer dans la branche locale, utilisez

git reset --hard HEAD~1

Pour supprimer dans une branche éloignée, utilisez

git push origin HEAD --force
Créé 28/08/2014 à 17:06
source utilisateur

voix
7

L'erreur:

Je git rebase -i --root« ed ma branche, en pensant que je pourrais ignorante reformuler le premier commettras différent du maître (le GitHub pour Windows vue par défaut est la comparaison à maîtriser, cacher son intégralité).

J'ai grandi une barbe tandis que la Silicon Valley 900+ commits se chargèrent dans Sublime. Sans changement de sortir, je payer ma batterie a ensuite de se raser, comme tous 900+ individuels commits nonchalamment rebasées - remise à zéro leur temps maintenant engager.

Décidé à battre Git et préserver les temps d'origine, je supprimé ce référentiel local et re-clonés à partir de la télécommande.

Maintenant, il a à nouveau ajouté un plus récent non nécessaire de maîtriser commettras je voulais enlever, ainsi procédé comme si.

Épuiser les options:

Je ne voulais pas git revert- cela créerait un commettras supplémentaire, donnant Git la main supérieure.

git reset --hard HEADn'a rien fait , après avoir vérifié la reflog, le seul et dernier HEADétait le clone - Git gagne.

Pour obtenir la plus récente SHA, j'ai vérifié le dépôt distant sur github.com - victoire mineure.

Après réflexion git reset --hard <SHA>avait travaillé, je mis à jour une autre branche à maîtriser et 1 ... 2 ... tapette! la validation était de retour - Git gagne.

Vérification de retour vers maître, le temps d'essayer git rebase -i <SHA>, puis retirez la ligne ... en vain, triste à dire. « Si vous supprimez une ligne ici QUE COMMIT SERA PERDU ». Ah ... passé sous silence nouvelle fonctionnalité troll le n00b dans les 2.8.3 notes de version .

La solution:

git rebase -i <SHA>puis d, drop = remove commit.

Pour vérifier, j'ai vérifié à une autre branche, et le tour est joué - ne cache commets chercher / tirer du maître.

https://twitter.com/holman/status/706006896273063936

Bonne journée.

Créé 25/05/2016 à 20:33
source utilisateur

voix
7

Voici une autre façon de le faire:

Checkout la branche que vous souhaitez revenir, puis réinitialiser votre copie de travail locale au commettez que vous voulez être le dernier sur le serveur distant (tout ce qui suit sera bye-bye). Pour ce faire, en droit, je sources du cliqué sur le et sélectionné « Reset BRANCHNAME à ce commit ». Je pense que la ligne de commande est:

git reset --hard COMMIT_ID

Puisque vous venez de vérifier votre branche de distance, vous n'allez avoir des changements locaux à craindre de perdre. Mais cela les perdre si vous avez fait.

Accédez ensuite au répertoire local de votre référentiel et exécutez la commande suivante:

git -c diff.mnemonicprefix=false -c core.quotepath=false \
push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

Cela effacera tous les commits après l'actuel dans votre dépôt local mais seulement pour qu'une branche.

Créé 13/05/2013 à 18:20
source utilisateur

voix
7

Toutes les commandes de restauration au-dessus de l'état de votre arbre de travail et l'index comme ils l'étaient avant de faire le commettras, mais ne rétablissent pas l'état du dépôt. Si vous regardez, commit « enlevé » est pas réellement supprimé, il est tout simplement pas celui sur la pointe de la branche actuelle.

Je pense qu'il n'y a pas moyen de supprimer une validation avec les commandes de porcelaine . La seule façon est de le retirer du journal et reflog puis d'exécuter un git prune --expire -now.

Créé 04/10/2012 à 08:19
source utilisateur

voix
5

Si vous voulez conserver l'historique, montrant l'engagement et la Revert, vous devez utiliser:

git revert GIT_COMMIT_HASH

entrer dans le message expliquant pourquoi vous revenir puis:

git push  

Lorsque vous émettez git logvous verrez les deux COMMIT « mauvais » et rétablir les messages du journal.

Créé 07/01/2015 à 15:13
source utilisateur

voix
5

Si vous venez foiré votre dernier commit (mauvais message, oublié d'ajouter quelques modifications) et que vous voulez le fixer avant de le pousser à une prise en pension publique pourquoi ne pas utiliser:

git commit --amend -m "New message here"

Si vous avez récemment mis en scène des changements, ils seront combinés avec le dernier commit (que vous essayez de se débarrasser) et remplacera ce commit.

Bien sûr, si vous modifiez un commit après avoir poussé, vous Réécrire l'histoire, donc si vous faites cela assurez-vous de comprendre les implications.

Vous pouvez également passer le « --no-edit » option au lieu de « -m » si vous préférez utiliser le message de commit précédent.

Docs: http://git-scm.com/docs/git-commit.html

Créé 27/05/2014 à 00:24
source utilisateur

voix
3

Source: https://gist.github.com/sagarjethi/c07723b2f4fa74ad8bdf229166cf79d8

Supprimer la dernière commettras

Par exemple, votre dernier commit

git push origin aa61ab32 ^: maître

Maintenant, vous voulez supprimer ce commit alors une façon facile de le faire suivant

Pas

  1. Tout d'abord remettre la branche au parent du courant commettre

  2. Force le pousser à la télécommande.

git reset HEAD^ --hard

git push origin -f

COMMIT particulier, vous souhaitez réinitialiser est la suite

git reset bb676878^ --hard

git push origin -f
Créé 22/06/2018 à 13:40
source utilisateur

voix
2

Ce que je fais habituellement quand je commets et pousser (si quelqu'un a poussé son commettras ce résoudre le problème):

git reset --hard HEAD~1

git push -f origin

espérons que cette aide

Créé 14/06/2017 à 09:22
source utilisateur

voix
1

Si vous avez déjà poussé, d' abord trouver la commettras vous voulez être à la HEAD (GIT_COMMIT_HASH_HERE $) , puis exécutez la commande suivante:

git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force

Ensuite, chaque lieu le repo a été cloné, exécutez:

git reset --hard origin/master
Créé 30/01/2017 à 00:25
source utilisateur

voix
0

delete engager locale

Comme vous pouvez le voir sur l' image ci - dessus , je veux supprimer revert « changement de test 2 » commit (SHA1 ID: 015b5220c50e3dfbb1063f23789d92ae1d3481a2 (vous pouvez obtenir ID SHA1 en utilisant la gitkcommande en bash git)).

Pour que je puisse utiliser (. Tous les travaux ci-dessous de commande uniquement local, vous devez pousser après suppression):

  1. git reset --hard 515b5220c50e3dfbb1063f23789d92ae1d3481a2// il vous back-up que commit (SHA1 ID de changement de test 4 Commit est 515b5220c50e3dfbb1063f23789d92ae1d3481a2 )
  2. git reset --hard HEAD~1 // il vous sauvegarde avant un commit.
  3. git reset --hard HEAD^ // Pour supprimer la dernière livraison de git

après suppression:

après suppression commit

Créé 03/07/2018 à 06:51
source utilisateur

voix
0

Réinitialiser sur la branche locale

git reset --hard HEAD~<Number of commit> So git reset --hard HEAD~3

poussée de force à l'origine

git push -f origin
Créé 29/05/2018 à 07:38
source utilisateur

voix
0

utiliser git revenir https://git-scm.com/docs/git-revert .it revenir tout le code, vous pouvez le faire la tête à côté commit.Then pointera à ce dernier commit. reverted commits supprimer jamais , mais cela n'affectera pas sur votre dernière commettez.

Créé 01/03/2017 à 15:15
source utilisateur

voix
0

git reset --hard

origine git push HEAD --force

Si un ou plusieurs des commits est marqué, supprimer la balise (s) d' abord. Dans le cas contraire le commit étiquetée n'est pas supprimé.

Créé 24/07/2015 à 14:45
source utilisateur

voix
0

En supposant que vous ne l'avez pas poussé au dépôt distant, vous pouvez re-cloner le dépôt. Cela a été ma méthode de choix quelques fois.

Créé 31/12/2014 à 06:54
source utilisateur

Créé 18/07/2018 à 06:27
source utilisateur

voix
-1

Prenez la sauvegarde de votre code dans le dossier temp. commande suivante réinitialise même en tant que serveur.

git reset --hard HEAD
git clean -f
git pull

Ensuite, copiez les seuls fichiers requis à partir du dossier temporaire, puis engager

Créé 14/07/2016 à 11:25
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more