Je ne pense pas que ce soit ce que signifie la question. Une fusion inversée dans SVN annule également les modifications de la validation en modifications locales, vous pouvez donc les modifier et valider à nouveau.
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é) .
Vous devrez probablement fournir l' -m <parent number>option à git revertpour spécifier la modification à annuler. Si vous souhaitez annuler une fusion d'historique non publié, utilisez git reset --hard HEAD^1.
Jakub Narębski
3
Jakub: c'est vrai si vous annulez un commit de fusion, mais dans la terminologie Subversion, "reverse-merge" est en fait simplement le nom pour annuler tout type de commit.
Ben James
4
Notez que l'utilisation -msignifie 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.
Martijn Pieters
125
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
Comment pouvez-vous obtenir le «numéro» associé au parent? Les branches ont-elles un «identifiant» numérique intrinsèque?
daniyalzade
7
Utilisez git show <merge commit SHA1>pour voir les parents, la numérotation est l'ordre dans Merge: e4c54b3 4725ad2
lequel
8
exemple: git revert -m 1 SHA1Cette 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.
c.apolzon
3
Quels sont les parents? E4c54b3 ou 4725ad2?
Dolphin
1
Cela ne fournit toujours pas suffisamment d'informations sur la relation entre les résultats de git show et les numéros parents. L '«ordre d'apparition» est-il basé sur 1? Basé sur 0? Dans cet exemple spécifiquement, quel est le SHA1 du parent 1? e4c54b3 ou 4725ad2?
cowlinator
4
Si je vous comprends bien, vous parlez de faire un
svn merge -rn:n-1
pour revenir sur un commit précédent, auquel cas vous recherchez probablement
Cela jette le commit de fusion, qui ne fait pas ce que l'affiche originale demande. L'OP essaie de faire un patch inversé pour annuler les modifications précédentes, et non d'effacer complètement l'historique des modifications précédentes.
-1
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):
Réponses:
Pour créer un nouveau commit qui `` annule '' les modifications d'un commit passé, utilisez:
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é) .
la source
-m <parent number>
option àgit revert
pour spécifier la modification à annuler. Si vous souhaitez annuler une fusion d'historique non publié, utilisezgit 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:Pour annuler une validation de fusion avant la dernière validation, vous devez faire:
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
la source
git show <merge commit SHA1>
pour voir les parents, la numérotation est l'ordre dansMerge: 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.Si je vous comprends bien, vous parlez de faire un
pour revenir sur un commit précédent, auquel cas vous recherchez probablement
la source
Utilisez la commande ci-dessus pour annuler les modifications de fusion.
la source
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):
la source