web-dev-qa-db-fra.com

Jeter les commits locaux à Git

En raison de mauvaises décisions en matière de sélection, mon référentiel Git local est actuellement cinq commits avant l'Origin, et n'est pas en bon état. Je veux me débarrasser de tous ces commits et recommencer.

Évidemment, supprimer mon répertoire de travail et procéder à un nouveau clonage suffirait, mais tout télécharger à partir de GitHub semble à nouveau excessif et ne constitue pas une bonne utilisation de mon temps.

Peut-être que git revert est ce dont j’ai besoin, mais je ne veux pas finir 1 s’engage avant l’Origine (ou même six), même si le code lui-même revient à la bon état. Je veux juste prétendre que la dernière demi-heure ne s'est jamais produite.

Y a-t-il une commande simple qui fera ceci? Cela semble être un cas d'utilisation évident, mais je n'en trouve aucun exemple.


Notez que cette question concerne spécifiquement commits, not à propos de:

  • fichiers non suivis
  • modifications non mises en place
  • changements mis en scène, mais non validés
1231
David Moles

Si vos commits excédentaires ne sont visibles que de vous, vous pouvez simplement faire git reset --hard Origin/<branch_name> pour revenir à l’origine. Cela réinitialisera l'état du référentiel à la validation précédente et annulera toutes les modifications locales.

Faire un git revert fait nouvea s'engage à supprimer ancien s'engage de manière à préserver l'historique de chacun.

2141
Ben Jackson

Supprimez simplement votre branche maître locale et recréez-la comme suit:

git branch -D master
git checkout Origin/master -b master
231
Ramon Zarazua B.

Essayer:

git reset --hard <the sha1 hash>

pour réinitialiser votre tête où vous voulez être. Utilisez gitk pour voir quel commit vous voulez être. Vous pouvez également réinitialiser Gitk.

173
Anders Zommarin

Supprimer le commit le plus récent:

git reset --hard HEAD~1

Supprimez le dernier commit, sans détruire le travail que vous avez effectué:

git reset --soft HEAD~1

81
James L.

Si vous utilisez Atlassian SourceTree app, vous pouvez utiliser l'option de réinitialisation du menu contextuel.

enter image description here

45
muruge

Sur votre tentative de branche:

git reset --hard Origin/<branch_name>

Validez l'inversion (à l'état, sans commit local), en utilisant "git log" ou "git status" par conséquent.

32
parasrish

git reset --hard @{u} * supprime toutes vos modifications locales sur la branche actuelle, y compris les validations. Je suis surpris que personne n'ait encore posté ceci, sachant que vous n'aurez pas à rechercher ce qui vous engage à revenir ou à jouer avec des branches.

* C'est-à-dire, réinitialiser la branche en cours à @{upstream} - généralement Origin/<branchname>, mais pas toujours

20
Kevin Chen

Pour voir/obtenir l'identifiant SHA-1 du commit que vous voulez revenir aussi

gitk --all

Pour revenir à ce commit

git reset --hard sha1_id

!Remarque. Tous les commits effectués après cette validation seront supprimés (et toutes vos modifications apportées au projet). Il est donc préférable de cloner le projet dans une autre branche ou de le copier dans un autre répertoire.

12
Nicholas

J'étais dans une situation où je voulais supprimer un commit qui n'était pas poussé, mais le commit était avant un autre. Pour ce faire, j'ai utilisé la commande suivante

git rebase -i HEAD~2 -> il rebase les deux derniers commits

Et j'ai utilisé 'drop' pour la signature de validation que je voulais supprimer.

9
Robert

Pour les commits locaux qui ne sont pas poussés, vous pouvez également utiliser git rebase -i pour supprimer ou écraser un commit.

8
Nikhil Katre

Supprimer les fichiers non suivis (modifications locales non validées)

git clean -df

Supprimer définitivement tous les validations locales et obtenir la dernière validation à distance

git reset --hard Origin/<branch_name>
7
ElasticCode

Pour ceux intéressés par la solution Visual Studio, voici l'exploration:

  1. Dans la fenêtre Team Explorer, connectez-vous au référentiel cible.
  2. Ensuite, à partir de Branches, cliquez avec le bouton droit de la souris sur la branche qui vous intéresse et sélectionnez View history.
  3. Cliquez avec le bouton droit sur une validation dans la fenêtre History et choisissez Reset -> Delete changes (--hard).

Cela jettera vos commits locaux et réinitialisera l’état de votre rapport sur le commit sélectionné. C'est à dire. Vos modifications après que vous ayez tiré le dépôt seront perdues.

3
Bozhidar Stoyneff

Si votre branche est en avance sur 'Origin/XXX' par 5,.

Vous pouvez émettre:

git reset --hard HEAD~5

Et il devrait supprimer les 5 derniers commits.

0
Ha Choo
git reset --hard <SHA-Code>

Cela vous sera utile si vous avez commis des erreurs sur votre copie locale et que vous voulez vous assurer que rien ne sera transmis à votre succursale distante par erreur.

Le code SHA peut être obtenu en consultant webVersion de votre tableau de bord git pour le dernier commit de la branche.

De cette façon, vous pouvez être synchronisé avec le dernier commit de la branche.

Vous pouvez effectuer git pull après avoir terminé la réinitialisation matérielle avec succès pour ne rien confirmer de nouveau, c’est-à-dire que vous obtenez le message.

Votre succursale est à jour avec Origin/<Branch Name>

0
Sameer Ashraf