Avec SVN, il est facile d'inverser la fusion d'un commit, mais comment faire cela avec Git?
Avec SVN, il est facile d'inverser la fusion d'un commit, mais comment faire cela avec Git?
Réponses:
Pour créer un nouveau commit qui `` annule '' les modifications d'un commit passé, utilisez:
$ git revert <commit>
Il est également possible de supprimer réellement un commit d'un point arbitraire dans le passé en rebasant puis en le réinitialisant, mais vous ne voulez vraiment pas le faire si vous avez déjà poussé vos commits vers un autre référentiel (ou si quelqu'un d'autre vous a retiré) .
-m <parent number>
option à git revert
pour spécifier la modification à annuler. Si vous souhaitez annuler une fusion d'historique non publié, utilisez git reset --hard HEAD^1
.
-m
signifie qu'une future fusion de la branche non fusionnée n'inclura pas les changements d'avant cette fusion! Voir schacon.github.com/git/howto/revert-a-faulty-merge.txt pour des moyens appropriés de fusionner à nouveau une branche non fusionnée.
Pour revenir une fusion commit, vous devez utiliser: git revert -m <parent number>
. Ainsi, par exemple, pour annuler le commit de fusion le plus récent en utilisant le parent avec le numéro 1, vous utiliseriez:
git revert -m 1 HEAD
Pour annuler une validation de fusion avant la dernière validation, vous devez faire:
git revert -m 1 HEAD^
Utilisez git show <merge commit SHA1>
pour voir les parents, la numérotation est l'ordre dans lequel ils apparaissent par exempleMerge: e4c54b3 4725ad2
Documentation de git merge: http://schacon.github.com/git/git-merge.html
Discussion sur git merge (déroutante mais très détaillée): http://schacon.github.com/git/howto/revert-a-faulty-merge.txt
git show <merge commit SHA1>
pour voir les parents, la numérotation est l'ordre dans Merge: e4c54b3 4725ad2
git revert -m 1 SHA1
Cette commande a fonctionné pour moi pour annuler un commit de fusion qui était plusieurs commits de fusion avant head et avait de nombreux commits en dessous.
git reset --hard HEAD^
Utilisez la commande ci-dessus pour annuler les modifications de fusion.
Si vous ne voulez pas vous engager, ou souhaitez vous engager plus tard (le message de validation sera toujours préparé pour vous, que vous pouvez également modifier):
git revert -n <commit>