Question

Quelle est la façon la plus simple d'annuler une livraison particulière qui est:

  • pas dans la tête ou HEAD
  • a été poussé à la télécommande.

Parce que s'il n'est pas la dernière commettras,

git reset HEAD

ne fonctionne pas. Et parce qu'il a été poussé à une télécommande,

git rebase -i

et

git rebase --onto

causera un problème dans les télécommandes.

Plus, je ne veux pas modifier l'histoire vraiment. S'il y avait du mauvais code, il était là dans l'histoire et peut être vu. Je veux simplement dans la copie de travail, et je ne me dérange pas une fusion inverse commit.

En d'autres termes, quelle est la Git équivalent des commandes svn suivantes :

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

qui supprime tous les changements de 295-302 en fusionnant inverse toutes les modifications de ces révisions, comme un commit.

svn merge -c -302 ^/trunk

qui annule la 302 commit, bien sûr en ajoutant un autre commit qui inverse fusionne les modifications de cette engager respective.

Je pensais que ce devrait être une opération assez simple dans Git et un cas d'utilisation assez courante. Qu'est-ce d'autre point de commits atomiques?

Nous avons la mise en scène stashing et tout pour que les commits sont parfaitement atomique, ne devrait pas vous être en mesure d'annuler une ou plusieurs de ces commits atomiques facilement?

Était-ce utile?

La solution

Identifier le hachage du commit, en utilisant git log, puis utilisez git revert <commit> pour créer un nouveau commit qui supprime ces changements. D'une certaine manière, git revert est l'inverse de git cherry-pick - celui-ci applique le patch à une branche qui manque ce, l'ancien qu'il retire d'une branche qui l'a

.

Autres conseils

Je n'aime pas le fait d'auto-validation que git revert, donc cela pourrait être utile pour certains.

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

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

qui est la même que la -n

% git revert -n <commit hash>

Parce qu'il a déjà été poussé, vous ne devriez pas manipuler directement l'histoire. git revert va revenir sur des changements spécifiques d'un engagement à l'aide d'un nouveau commit, afin de ne pas manipuler l'histoire commettre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top