web-dev-qa-db-fra.com

Retour à un commit précédent dans Gitkraken

Mon partenaire de programmation et moi-même, étant relativement nouveaux dans Git et Gitkraken, avons commis des erreurs, effectué quelques tentatives d'extraction et commis dans le mauvais ordre et mis les choses en place. J'aimerais récupérer un instantané de plusieurs commits et le comparer manuellement à l'état actuel du code. Une commande dans le sens de

"Emportez l’état du répertoire de travail dans this commit historique" Ou, mieux encore, "Donnez-moi le contenu de this commit historique dans un répertoire de travail différent, que je nommer "

Les options qui me sont données ne ressemblent pas exactement à cela. Je vois «réinitialiser le maître à ce commit» dans plusieurs versions, mais aucun de ces titres ne me convainc que je vais pouvoir regarder l'état précédent sans endommager le chemin qui le ramène à l'état actuel. Est-ce que je manque quelque chose? Quelle est la meilleure façon de faire ce que j'essaie de faire?

4
Joymaker

... mais aucun de ces titres ne me convainc que je vais pouvoir regarder l'état précédent sans endommager le chemin qui mène à l'état actuel ...

Tout d’abord, vous pouvez toujours revenir en arrière. GitKraken fournit le bouton pratique Annuler qui vous permet de revenir sur la plupart des choses que vous faites avec un simple clic sur un bouton. Si vous voulez être sûr de pouvoir revenir facilement en arrière, vous pouvez simplement créer une branche backup. Si les choses tournent mal, vérifiez-les et vous êtes de retour.

Ainsi, vous pouvez vous détendre et simplement essayer des choses sans avoir à vous soucier de rien casser. La question est maintenant ce que vous voulez réellement faire:

  • "Amener l'état du répertoire de travail à ce commit historique"

    Si vous souhaitez simplement revenir à un état antérieur (par exemple, commit), vous pouvez utiliser le reset <branch> to this commit - hard. Vous serez de retour au commit sélectionné comme si rien ne s'était passé. Si votre état précédent est toujours accessible depuis n'importe quelle branche (c'est le cas si vous avez créé une branche de sauvegarde), vous pouvez toujours consulter tous les commits et leurs modifications.

    Sachez que vous perdez des modifications non mises en scène et non validées lors d’une réinitialisation matérielle.

  • "donnez-moi le contenu de cet engagement historique dans un autre répertoire de travail , que je nommerai"

    Git ne connaît qu'un répertoire de travail, donc ce n'est pas directement possible. Vous pouvez toutefois comparer votre état actuel à un précédent, comme l'a suggéré @Christopher Díaz Riveros. Au lieu d'une réinitialisation hard, vous pouvez effectuer une opération soft. Cela réinitialisera votre répertoire de travail sur le commit sélectionné, mais conservera toutes les modifications (comparées à votre état précédent) en tant que modifications planifiées. Cela vous permet de les revoir facilement, car ils apparaissent dans la partie inférieure droite de GitKraken et vous pouvez les ignorer ou les commettre selon vos besoins.

2
kowsky

Je vous suggère d'utiliser git reflog, cette commande contient un historique local de vos commits et modifications. Ce journal vous permet de voir tous les événements de votre référentiel local. 

Après avoir trouvé le commit exact que vous voulez récupérer, vous pouvez le définir comme point de départ avec git reset --soft HEAD@{n}

ce que --soft fait est 

Does not touch the index file or the working tree at all (but resets the 
head to <commit>, just like all modes do). This leaves all your changed
files "Changes to be committed", as git status would put it.

Après cela, vous aurez tous les changements dans votre zone de scène, vous pourrez alors décider de les valider à nouveau ou de changer quelque chose.

Je vous suggérerais de lire this section de le livre de Git et spécialement this section au sujet de l'annulation des choses.

PS De plus, vous pouvez utiliser git reset autant de fois que vous le souhaitez, car toutes les commandes que vous utilisez sont enregistrées dans git reflog. De ce fait, si vous faites quelque chose que vous ne voulez pas, vous pouvez également l'annuler.

J'espère que ça aide