Sourcetree - annuler les commissions non repoussées

208

J'utilise Sourcetree pour Windows pour un référentiel git et je voudrais annuler un commit non poussé.

Est-ce possible? Si je "révoque le commit", cela crée un deuxième commit qui annule le premier commit, mais je ne veux pas que le premier commit apparaisse du tout dans mon contrôle de code source.

Je pourrais également supprimer mon référentiel local et le retirer à nouveau sans ma validation locale, mais peut-être y a-t-il une autre façon?

deimos1988
la source
J'ai écrit un article détaillé avec des captures d'écran. Partager dans l'espoir que cela aiderait: attosol.com/undo-in-git-using-sourcetree
Rahul Soni

Réponses:

345
  1. Faites un clic droit sur le commit que vous souhaitez réinitialiser (pas celui que vous souhaitez supprimer!)
  2. Sélectionnez "Réinitialiser le maître sur ce commit"
  3. Sélectionnez "Soft" reset.

Une réinitialisation logicielle conservera vos modifications locales.

Source: https://answers.atlassian.com/questions/153791/how-should-i-remove-push-commit-from-sourcetree

Éditer

À propos git revert: Cette commande crée une nouvelle validation qui annulera les autres validations. Par exemple, si vous avez un commit qui ajoute un nouveau fichier, git revertpourrait être utilisé pour faire un commit qui supprimera le nouveau fichier.

À propos de l'application d'une réinitialisation logicielle: Supposons que vous ayez les validations Adans E( A---B---C---D---E) et que vous souhaitez supprimer la dernière validation ( E). Ensuite, vous pouvez effectuer une réinitialisation logicielle pour valider D. Avec une réinitialisation logicielle E, la validation sera supprimée de git mais les modifications locales seront conservées. Il y a plus d'exemples dans le documentation de git reset .

soirée
la source
34
Ou si vous travaillez sur une branche - "Réinitialiser la branche actuelle à ce commit"
Tom Auger
5
Je ne comprends vraiment pas ces explications de l'interface utilisateur ... Réinitialiser la branche actuelle à ce commit tant ne semble pas supprimer le commit. Et cela a fini par faire ce que vous attendez de plus. Il a réinitialisé ma copie de travail sur la validation, au lieu de la supprimer.
MrFox
Je suis d'accord avec @MrFox. Après avoir fait cela, le commit que je ne veux pas est toujours affiché dans l'arborescence.
Timmmm
@Timmmm: La nouvelle explication est-elle utile?
nightlyop
En fait, j'ai réalisé que j'avais déjà poussé mon commit vers github. J'ai trouvé un article qui explique comment "réécrire l'histoire" mais il semble que ce soit plus difficile que cela ne vaut!
Timmmm
46

Si vous sélectionnez l'entrée de journal à laquelle vous souhaitez revenir, vous pouvez cliquer sur "Réinitialiser à ce commit". N'utilisez cette option que si vous n'avez pas poussé les modifications de validation inverse. Si vous craignez de perdre les modifications, vous pouvez utiliser le mode doux qui laissera un ensemble de modifications non validées (ce que vous venez de changer). L'utilisation du mixage réinitialise la copie de travail mais conserve ces modifications, et un disque dur se débarrassera complètement des modifications. Voici quelques captures d'écran:

entrez la description de l'image ici

Muhammad Awais
la source
3
Si vous voyez toujours une icône indiquant qu'un Push est disponible à partir de votre commit précédent (que vous venez d'effacer), tirez et Sourcetree semble mettre à jour l'interface utilisateur.
ChristoKiwi
6

Si vous souhaitez supprimer un commit, vous pouvez le faire dans le cadre d'un rebase interactif. Mais faites-le avec prudence, afin de ne pas gâcher votre repo.

À Sourcetree:

  1. Cliquez avec le bouton droit sur un commit plus ancien que celui que vous souhaitez supprimer, puis choisissez " Rebase des enfants de xxxx de manière interactive ... ". Celui sur lequel vous cliquez sera votre "base" et vous pourrez apporter des modifications à chaque commit effectué après celui-ci.
  2. Dans la nouvelle fenêtre, sélectionnez le commit que vous souhaitez supprimer et appuyez sur le bouton " Supprimer " en bas, ou faites un clic droit sur le commit et cliquez sur " Supprimer le commit ".
  3. Cliquez sur " OK " (ou " Annuler " si vous souhaitez abandonner).

Consultez cet article de blog Atlassian pour en savoir plus sur le rebasage interactif dans Sourcetree.

jna
la source
C'est la réponse que je cherchais, fonctionnait exactement selon les besoins.
Cliff Burton
0

Si vous êtes sur une autre branche, vous devez d'abord «vérifier cette validation» pour la validation que vous souhaitez supprimer, puis seulement «réinitialiser la branche actuelle sur cette validation» en choisissant la validation précédente de wright, cela fonctionnera.

pomaranga
la source