Quelle est la façon la plus simple d'annuler une validation particulière:
- pas dans la tête ou la tête
- A été poussé vers la télécommande.
Parce que si ce n'est pas le dernier commit,
git reset HEAD
ne fonctionne pas. Et parce qu'il a été poussé vers une télécommande,
git rebase -i
et
git rebase --onto
causera un problème dans les télécommandes.
Plus encore, je ne veux pas vraiment modifier l'histoire. S'il y avait un mauvais code, il était là dans l'histoire et peut être vu. Je le veux juste dans la copie de travail, et cela ne me dérange pas un commit de fusion inverse.
En d'autres termes, quel est l' équivalent Git des commandes svn suivantes:
svn merge -r 303:295 http://svn.example.com/repos/calc/trunk
qui supprime toutes les modifications de 295 à 302 en fusionnant toutes les modifications de ces révisions, comme un nouveau commit.
svn merge -c -302 ^/trunk
qui annule le commit 302, bien sûr en ajoutant un autre commit qui inverse fusionne les modifications de ce commit respectif.
Je pensais que cela devrait être une opération assez simple dans Git et un cas d'utilisation assez courant. À quoi d'autre sert la validation atomique?
Nous avons un stashing de mise en scène et tout pour garantir que les validations sont parfaitement atomiques, ne devriez-vous pas être en mesure d'annuler facilement une ou plusieurs de ces validations atomiques?
la source
Je n'aime pas la validation automatique qui le
git revert
fait, donc cela pourrait être utile pour certains.Si vous voulez juste que les fichiers modifiés ne soient pas la validation automatique , vous pouvez utiliser
--no-commit
qui est le même que le
-n
la source
git reset HEAD~1 --soft
si vous êtes déjà revenu sans-n
git reset HEAD~n
ne résoudra pas l'annulation de tout commit qui n'est pas accessible en continu depuis la tête. La requête consiste à annuler tout commit particulier.git revert --continue
ce qui m'avait été demandé. Cela a fonctionné, mais malheureusement, les résultats ont été engagés. Peut-être que je devais le fairegit revert --no-commit --continue
.git revert
, si vous avez oublié le-n
; car à ce stade, le dernier commit est la réversion, donc la réinitialisation logicielle annulera ce commit mais pas les modifications de code associées du retourParce qu'il a déjà été poussé, vous ne devez pas manipuler directement l'historique.
git revert
va annuler les modifications spécifiques d'une validation en utilisant une nouvelle validation, afin de ne pas manipuler l'historique des validations.la source
Si la validation que vous souhaitez annuler est une validation fusionnée (a déjà été fusionnée), vous devez choisir l'option
-m 1
ou-m 2
, comme indiqué ci-dessous. Cela permettra à git de savoir quel commit parent du commit fusionné utiliser. Plus de détails peuvent être trouvés ICI .git revert <commit> -m 1
git revert <commit> -m 2
la source