Question

Je voudrais savoir comment supprimer un commettras.

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 exact?

Était-ce utile?

La solution

Attention: git reset --hard effacerons 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 validation, cette commande sera wack il ...

git reset --hard HEAD~1

Le HEAD~1 signifie le commit avant la tête.

Ou, vous pouvez regarder la sortie de 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 ...

git push origin HEAD --force

Cependant , 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 HEAD est 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 arborescence de travail et de l'index.


Enfin, si vous avez besoin de trouver un commettras que vous « supprimé », il est généralement présent dans git reflog sauf si vous avez des déchets collectés votre dépôt.

Autres conseils

Si vous ne l'avez pas encore poussé le commettras partout, vous pouvez utiliser git rebase -i pour supprimer qui commettras. Tout d'abord, savoir comment loin en arrière qui commettent est (environ). Ensuite, faites:

git rebase -i HEAD~N

Le ~N signifie rebasage le dernier N engage (N doit ê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 le rebasage avec des images et des exemples.

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

Une autre possibilité est l'un de mes commandes préféré:

git rebase -i <commit>~1

Cela va démarrer le rebasage en mode interactif -i au 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.

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 » cette commande commit (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.

Suppression d'un ensemble de commettre

git rebase -p --onto SHA^ SHA

évidemment 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

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é-allouent, utilisez git revenir

$ git revert HEAD
git reset --hard commitId

git push <origin> <branch> --force

PS: CommitId désigne celui que vous souhaitez revenir à

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 puisque vous utilisez --hard et -f

.
  • git checkout b3d92c5 Commander le dernier commit utile.
  • git checkout -b repair Créer une nouvelle branche à travailler.
  • Exécuter git cherry-pick 77b9b82 commettre à 3.
  • Exécuter git cherry-pick 2c6a45b commettre à 1.
  • git checkout master checkout master.
  • git reset --hard b3d92c5 maître de réinitialisation à la dernière commettras utilisable.
  • git merge repair Fusionner notre nouvelle branche sur maître.
  • git push -f origin master push maître à la prise en pension à distance.

Historique des modifications avec force

En supposant que vous ne voulez pas simplement supprimer le dernier commit, mais vous voulez 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~5 si vous voulez voir les cinq derniers commits.

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

Historique des modifications additivement

Essayez git revert <commit hash>. Revert va créer un nouveau commettras qui annule la spécifié commis.

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

Ceci 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 à l'engagement ci-dessous 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
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 engagement.

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

Voici une autre façon de le faire:

Voir 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 l'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.

L'erreur:

Je git rebase -i --root'ed ma branche, pensant ignorante je pourrais reformuler la première commettras divergeaient du maître ( 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 -. Réinitialisant leur temps maintenant engager

Déterminé à 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 ajouté un nouveau plus récent non nécessaire de maîtriser commettras je voulais supprimer, ainsi procédé comme ainsi.

Épuiser les options:

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

git reset --hard HEAD n'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 à distance sur github.com -. Gain mineur

Après avoir réfléchi 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 qui allouent SERONT PERDUS ». Ah ... passé sous silence nouvelle fonctionnalité troll le n00b 2.8.3 release notes .

La solution:

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

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

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

Bonne journée à vous.

Toutes les restore ci-dessus 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, le 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 de moyens pour éliminer une validation avec commandes de porcelaine . La seule façon est de le retirer du journal et reflog puis d'exécuter un git prune --expire -now.

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

Supprimer les dernière livraison

Par exemple, votre dernier commit

origine git push + aa61ab32 ^: maître

Maintenant, vous voulez supprimer ce commit alors un moyen facile de faire ce qui suit

Étapes

  1. Tout d'abord réinitialiser la branche au parent du commit courant

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

git reset HEAD^ --hard

git push origin -f

Pour commettras particulier, vous souhaitez réinitialiser est suivant

git reset bb676878^ --hard

git push origin -f

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 que commettras.

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

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

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

Si vous voulez conserver l'historique, montrant le commit et le retour en arrière, vous devez utiliser:

git revert GIT_COMMIT_HASH

entrer dans le message expliquant pourquoi vous revenir puis:

git push  

Lorsque vous émettez git log vous verrez à la fois le Commit « mauvais » et rétablir les messages du journal.

Si vous avez déjà poussé, d'abord trouver vous vous engagez voulez être à la HEAD (GIT_COMMIT_HASH_HERE $) , puis exécutez ce qui suit:

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

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

git reset --hard HEAD~1

git push -f origin

espérons que cette aide

Remise à zéro 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

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

Si vous voulez conserver vos modifications et supprimer commits récents

git reset --soft HEAD^
git pull

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 commande gitk dans 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 du changement test 4 commit 515b5220c50e3dfbb1063f23789d92ae1d3481a2 )
  2. git reset --hard HEAD~1 // back-up vous avant un commit.
  3. git reset --hard HEAD^ // Pour supprimer le dernier commit de git

après suppression:

Je l'ai déjà poussé. La nécessité de revenir quelques commits Retour remotly. Ont essayé de nombreuses variantes, mais seulement ce de Justin par Bush git fonctionne bien pour moi:

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

git reset --hard

origine git push HEAD --force

Si l'un ou plusieurs des commits est marqué, supprimer la balise (s) d'abord. Sinon, les étiquetée Commit est pas supprimés.

// display git commit log    
$ git log --pretty=oneline --abbrev-commit

// show last two commit and open in your default editor
// then delete second commit line and save it
$ git rebase -i HEAD~2

Référence: Comment supprimer une livraison en git, local et distant

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.

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top