web-dev-qa-db-fra.com

Revenir à un commit par un hash SHA dans Git?

Je ne comprends pas bien comment fonctionne git revert. Par exemple, je veux revenir à un commit six commits derrière la tête, annulant tous les changements dans les commits intermédiaires entre les deux.

Dites que son SHA hash est 56e05fced214c44a37759efa2dfc25a65d8ae98d. Alors pourquoi ne puis-je pas faire quelque chose comme:

git revert 56e05fced214c44a37759efa2dfc25a65d8ae98d
551
JP Silvashy

Si vous voulez valider le HEAD actuel avec l'état exact à un commet différent, en annulant tous les commits intermédiaires, vous pouvez utiliser resetpour créer le bon état 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"
1064
CB Bailey

Ce que git-revert crée, c’est un commit qui annule les modifications apportées à un commit, créant un commit qui est inverse (bien, réciproque) d’un commit donné. Donc

git revert <SHA-1>

devrait et fonctionne.

Si vous voulez revenir à un commit spécifié, et que vous pouvez le faire parce que 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 toutes les modifications non validées dans le répertoire de travail).

Notes complémentaires

En passant, cela n’est peut-être pas évident, mais partout où la documentation indique <commit> ou <commit-ish> (ou <object>), vous pouvez indiquer un identifiant SHA-1 (complet ou abrégé) de commit.

128
Jakub Narębski

Il annule le dit commit, c'est-à-dire ajoute le commit qui lui est opposé. Si vous souhaitez extraire une révision antérieure, procédez comme suit:

git checkout 56e05fced214c44a37759efa2dfc25a65d8ae98d
84

Le meilleur moyen de revenir à un commit spécifique est:

git reset --hard <commit-id>

Ensuite:

git Push <reponame> -f
60
darshit khatri

Si vos modifications ont déjà été placées dans une publique, partagée distante et que vous souhaitez annuler tous les commits entre HEAD et <sha-id>, vous pouvez passer une plage de validations à git revert,

git revert 56e05f..HEAD

et tous les commits seront annulés entre 56e05f et HEAD (à l'exception du point de départ de la plage, 56e05f).

57
Flueras Bogdan

Mise à jour:

Cette réponse est plus simple que ma réponse: Comment rétablir le dépôt précédent du dépôt Git?

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 également de tête. Nous réparons la tête par le second.

18
Jacob Dam

Ceci est plus compréhensible:

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

Et pour prouver que cela a fonctionné:

git diff 56e05fced
3
Tuyen Tran

Devrait être aussi simple que:

git reset --hard 56e05f

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

1
longda