886 votes

Annuler un particulier s'engager dans Git

Quelle est la façon la plus simple d'annuler un particulier s'engager à ce que:

  • pas dans la tête ou la TÊTE
  • A été poussé à la télécommande.

Parce que si c'est pas le dernier commit,

git reset HEAD

ne fonctionne pas. Et parce qu'il a été poussé à distance,

git rebase -i

et

git rebase --onto

va causer un problème dans les télécommandes.

Plus, je ne veux pas modifier l'histoire, vraiment. Si il y avait un mauvais code, il était là, dans l'histoire et peut être vu. J'ai juste envie de sortir dans la copie de travail, et je n'ai pas l'esprit d'un revers de fusion s'engager.

En d'autres termes, quel est le Git équivalent de la suite de commandes svn:

svn merge -r 303:295 http://svn.example.com/repos/calc/trunk

qui supprime toutes les modifications à partir de 295 302 par la fusion de tous les changements dans ces révisions, comme un nouveau commit.

svn merge -c -302 ^/trunk

qui annule la 302 commettre, bien sûr, par l'ajout de s'engager que l'inverse fusionne les modifications de ce commit.

J'ai pensé qu'il devrait être une opération assez simple dans Git et assez de cas d'utilisation. Quoi d'autre est le point de atomique s'engage?

Nous l'avons mise en scène accrocher et d'assurer, à tous les commits sont parfaitement atomique, ne devriez-vous pas être en mesure d'annuler une ou plusieurs de ces atomique s'engage facilement?

1364voto

Andrew Aylett Points 16469

Identifier la valeur de hachage de les commettre, à l'aide de git log, puis utilisez git revert <commit> pour créer un nouveau commit qui supprime ces changements. Dans un sens, git revert est l'inverse de l' git cherry-pick - cette dernière s'applique le patch pour une branche qui manque, l'ancien supprime à partir d'une branche.

417voto

naomik Points 10423

Je n'aime pas l'auto-commit qu' git revert , donc cela pourrait être utile pour certains.

Si vous voulez juste les fichiers modifiés ne pas l'auto-commit, vous pouvez utiliser --no-commit

% git revert --no-commit <commit hash>

qui est le même que l' -n

% git revert -n <commit hash>

42voto

moatPylon Points 858

Parce qu'il a déjà été poussé, vous ne devriez pas manipuler directement l'histoire. git revert reviendra changements spécifiques à partir d'une validation à l'aide d'un nouveau commit, afin de ne pas manipuler commettre l'histoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X