Question

Comment puis-je aller sur le retour à un particulier Commit dans git?

La meilleure réponse que quelqu'un pourrait me donner était d'utiliser des temps git revert X jusqu'à ce que j'atteins désiré commettre.

Disons que je veux revenir à un engagement qui est 20 commits vieux, je dois courir 20 fois.

Y at-il un moyen plus facile de le faire?

Je ne peux pas utiliser parce que ce référentiel réinitialisation est public.

Était-ce utile?

La solution

Essayez ceci:

git checkout [revision] .

[revision] est le hachage commit (par exemple: 12345678901234567890123456789012345678ab).

Ne pas oublier le . à la fin, très important. Cela appliquera les changements à l'arbre entier. Vous devez exécuter cette commande dans la racine du projet git. Si vous êtes dans un sous-répertoire, cette commande ne change que les fichiers dans le répertoire courant. Puis engager et vous devriez être bon.

Vous pouvez annuler cette action en

git reset --hard 

qui supprimera toutes les modifications du répertoire de travail et de la zone mise en scène.

Autres conseils

Pour revenir à une engagement spécifique:

git reset --hard commit_sha

Pour rollback 10 engage retour:

git reset --hard HEAD~10

Vous pouvez utiliser « revert git » comme dans le post suivant si vous ne voulez pas réécrire l'histoire

Comment de revenir à un dépôt Git précédent commettre?

Eh bien, je suppose que la question est, qu'est-ce que vous entendez par « faire reculer »? Si vous ne pouvez pas reset parce qu'il est public et que vous voulez garder l'historique des commits intacte, voulez-vous dire que vous voulez juste votre copie de travail pour tenir compte d'une validation spécifique? Utilisez git checkout et la validation de hachage.

Edit: Comme cela a été souligné dans les commentaires, en utilisant git checkout sans spécifier une branche vous laissera dans un état « pas de branche ». Utilisez git checkout <commit> -b <branchname> à la caisse dans une branche, ou git checkout <commit> . à la caisse dans la branche de courant.

L'affiche originale déclare:

  

La meilleure réponse que quelqu'un pourrait me donner était d'utiliser des temps git revert X jusqu'à ce que je   atteindre le désiré commit.

     

Disons que je veux revenir à un engagement qui est 20 commits vieux, j'aurais   pour l'exécuter 20 fois.

     

Y at-il un moyen plus facile de le faire?

     

Je ne peux pas utiliser cette réinitialisation font repo est public.

Il est pas nécessaire d'utiliser des temps git revert X. git revert peut accepter une engager gamme comme un argument, donc il vous suffit de l'utiliser une fois pour revenir une gamme de commits Par exemple, si vous souhaitez revenir les 20 derniers commits.

git revert --no-edit HEAD~20..

La gamme HEAD~20.. engagement est court pour HEAD~20..HEAD, et signifie "démarrer à partir du 20 e parent de la tête commit, et annule tous les commits après jusqu'à HEAD".

Cela reviendra que 20 commits, en supposant qu'aucun d'entre eux sont fusion engage. S'il y a fusion engage, vous ne pouvez pas les annuler en une seule commande, vous aurez besoin de les revenir individuellement avec

git revert -m 1 <merge-commit>

Notez aussi que je l'ai testé à l'aide d'une gamme avec git revert en utilisant la version git 1.9.0. Si vous utilisez une version plus ancienne de git, en utilisant une gamme avec git revert peut ou peut ne pas fonctionner .

Dans ce cas, git revert est préférable à git checkout.

Notez que, contrairement à cette réponse qui dit utiliser git checkout, git revert supprimera effectivement les fichiers qui ont été ajoutés dans l'un des commits que vous êtes revenir , ce qui rend ce la bonne façon de revenir une série de révisions.

Documentation

Étape 1: fetch liste des commits:

git log

Vous obtiendrez la liste comme dans cet exemple:

[Comp:Folder User$ git log
commit 54b11d42e12dc6e9f070a8b5095a4492216d5320
Author: author <author@gmail.com>
Date:   Fri Jul 8 23:42:22 2016 +0300

This is last commit message

commit fd6cb176297acca4dbc69d15d6b7f78a2463482f
Author: author <author@gmail.com>
Date:   Fri Jun 24 20:20:24 2016 +0300

This is previous commit message

commit ab0de062136da650ffc27cfb57febac8efb84b8d
Author: author <author@gmail.com>
Date:   Thu Jun 23 00:41:55 2016 +0300

This is previous previous commit message
...

Étape 2: copie nécessaire commit hachage et le coller pour votre commande:

git checkout fd6cb176297acca4dbc69d15d6b7f78a2463482f

est tout.

git read-tree -um @ $commit_to_revert_to

le fera. Il est "git checkout", mais sans mettre à jour HEAD.

Vous pouvez obtenir le même effet avec

git checkout $commit_to_revert_to
git reset --soft @{1}

si vous préférez les commandes confort chaînant.

Ils vous laissent avec votre worktree et l'index dans l'état souhaité, vous pouvez juste git commit pour terminer.

Je ne sais pas ce qui a changé, mais je ne parviens pas à la caisse une validation spécifique sans --detach option. La commande complète qui a fonctionné pour moi était: git checkout --detach [commit hash]

Pour revenir de l'état détaché je devais ma caisse branche locale: git checkout master

Disons que vous travaillez sur un projet et après une journée ou plus. Vous remarquez une caractéristique est encore génère des erreurs. Mais vous ne savez pas ce que vous avez fait le changement qui a causé l'erreur. Donc, vous devez pêcher commits travail précédent. Pour revenir à une validation spécifique:

git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 .

Ok, de sorte que commettras fonctionne pour vous. Plus d'erreur. Vous mis le doigt sur la question. Maintenant, vous pouvez revenir à la dernière commettez:

git checkout 792d9294f652d753514dc2033a04d742decb82a5 .

Et la caisse d'un fichier spécifique avant qu'il a causé l'erreur (dans mon cas, je l'utilise par exemple Gemfile.lock):

git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 -- /projects/myproject/Gemfile.lock

Et c'est une façon de gérer les erreurs créées dans engage sans se rendre compte des erreurs plus tard.

Vous voulez HEAD mode détaché?

Si vous souhaitez rollback temps X à un certain engagement avec une tête INDEPENDANTE (ce qui signifie que vous ne pouvez pas gâcher quoi que ce soit), puis par tous les moyens, utilisez ce qui suit:

(remplacez X par combien vous souhaitez commits revenir)

git checkout HEAD~X

i.e.. pour revenir un commettras:

git checkout HEAD~1

Voici un exemple pour faire

    cd /yourprojects/project-acme 


    git checkout efc11170c78 .

Vous pouvez trouver l'engagement id lié à chaque validation dans la section commits de GitHub / BitBucket / gitlab ce. Il est très simple, supposons que votre commettras id est 5.889.575 alors si vous voulez revenir à cette partie dans votre code alors il vous suffit de taper

git checkout 5889575 .

Cela vous prendra à ce moment dans votre code.

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