Question Revenir à une validation par un hachage SHA dans Git? [dupliquer]


Cette question a déjà une réponse ici:

Je ne suis pas clair sur comment git revert travaux. Par exemple, je veux revenir à un engagement six commits derrière la tête, en inversant tous les changements dans les commits intermédiaires entre les deux.

Dites son SHA a ses 56e05fced214c44a37759efa2dfc25a65d8ae98d. Alors pourquoi je ne peux pas faire quelque chose comme:

git revert 56e05fced214c44a37759efa2dfc25a65d8ae98d

508
2017-12-12 23:34


origine


Réponses:


Si vous voulez commettre au dessus de la HEAD actuelle avec l'état exact à un commit différent, en annulant tous les commits intermédiaires, alors vous pouvez utiliser reset pour créer l'état correct de l'index pour effectuer la validation.

# Reset the index and working tree to the desired tree
# Ensure you have no uncommitted changes that you want to keep
git reset --hard 56e05fced

# Move the branch pointer back to the previous HEAD
git reset --soft HEAD@{1}

git commit -m "Revert to 56e05fced"

982
2017-12-12 23:51



Quelle git-revert est de créer un commit qui annule les changements effectués dans un commit donné, créant un commit qui est inverse (bien, réciproque) d'un commit donné. Donc

git revert <SHA-1>

devrait et fonctionne.

Si vous souhaitez revenir en arrière à un commit spécifié, et vous pouvez le faire car cette partie de l'historique n'a pas encore été publiée, vous devez utiliser git-reset, pas git-revert:

git reset --hard <SHA-1>

(Notez que --hard vous ferait perdre tous les changements non-engagés dans le répertoire de travail).

Notes complémentaires

En passant, peut-être que ce n'est pas évident, mais partout où la documentation dit <commit> ou <commit-ish> (ou <object>), vous pouvez mettre un SHA-1 identifiant (complet ou abrégé) de validation.


112
2017-12-13 09:54



Il retourne le commit, c'est-à-dire ajoute le commit opposé. Si vous voulez passer en revue une révision précédente, vous faites:

git checkout 56e05fced214c44a37759efa2dfc25a65d8ae98d

83
2017-12-12 23:40



La meilleure façon de revenir à une validation spécifique est la suivante:

git reset --hard <commit-id>

Alors:

git push <reponame> -f

59
2017-11-19 13:50



Si vos modifications ont déjà été transmises à un public, partagé à distance, et vous souhaitez annuler tous les commits entre HEAD et <sha-id>, vous pouvez passer une plage de validation à git revert,

git revert 56e05f..HEAD

et il va rétablir tous les commits entre 56e05f et HEAD (à l'exclusion du point de départ de la plage, 56e05f).


52
2017-12-19 13:15



Actualisé:

Cette réponse est plus simple que ma réponse: Comment restaurer le dépôt Git dans un commit précédent?

Réponse originale

# Create a backup of master branch
git branch backup_master

# Point master to '56e05fce' and
# make working directory the same with '56e05fce'
git reset --hard 56e05fce

# Point master back to 'backup_master' and
# leave working directory the same with '56e05fce'.
git reset --soft backup_master

# Now working directory is the same '56e05fce' and
# master points to the original revision. Then we create a commit.
git commit -a -m "Revert to 56e05fce"

# Delete unused branch
git branch -d backup_master

Les deux commandes git reset --hard et git reset --soft sont magiques ici. Le premier change le répertoire de travail, mais il change aussi de tête. Nous réparons la tête par le second.


18
2018-03-22 05:09



Ceci est plus compréhensible:

git checkout 56e05fced -- .
git add .
git commit -m 'Revert to 56e05fced'

Et pour prouver que ça a marché:

git diff 56e05fced

3
2018-06-23 16:29



Devrait être aussi simple que:

git reset --hard 56e05f

Cela vous ramènera à ce moment précis.


0
2018-01-04 00:15



Cela pourrait fonctionner:

git checkout 56e05f
echo ref: refs/heads/master > .git/HEAD
git commit

-2
2018-06-25 22:36