Jaki jest najprostszy sposób cofnięcia konkretnego zatwierdzenia, który jest:
- nie w głowie ani w głowie
- Został przekazany do pilota.
Ponieważ jeśli nie jest to ostatni zatwierdzenie,
git reset HEAD
nie działa A ponieważ został przekazany do pilota,
git rebase -i
i
git rebase --onto
spowoduje jakiś problem w pilotach.
Co więcej, nie chcę tak naprawdę modyfikować historii. Jeśli był zły kod, był w historii i można go zobaczyć. Po prostu chcę, żeby to było w kopii roboczej i nie mam nic przeciwko zatwierdzeniu przez scalanie w odwrotnej kolejności.
Innymi słowy, jaki jest odpowiednik Git następujących poleceń svn:
svn merge -r 303:295 http://svn.example.com/repos/calc/trunk
który usuwa wszystkie zmiany z 295 do 302 poprzez odwrotne scalenie wszystkich zmian w tych wersjach, jako nowe zatwierdzenie.
svn merge -c -302 ^/trunk
który anuluje zatwierdzenie 302, oczywiście przez dodanie kolejnego zatwierdzenia, które odwraca scala zmiany z tego odpowiedniego zatwierdzenia.
Pomyślałem, że powinna to być dość prosta operacja w Git i dość powszechny przypadek użycia. Jaki jeszcze sens mają atomowe zmiany?
Mamy ukrywanie sceniczne i wszystko po to, aby upewnić się, że zatwierdzenia są całkowicie atomowe, czy nie powinieneś być w stanie łatwo cofnąć jednego lub więcej z tych zatwierdzeń atomowych?
źródło
Nie podoba mi się funkcja automatycznego zatwierdzania
git revert
, więc może to być pomocne dla niektórych.Jeśli chcesz tylko zmodyfikować pliki, a nie automatyczne zatwierdzanie , możesz użyć
--no-commit
który jest taki sam jak
-n
źródło
git reset HEAD~1 --soft
jeśli już się wycofałeś-n
git reset HEAD~n
nie rozwiąże cofania żadnego zatwierdzenia, które nie jest stale dostępne z głowy. Zapytanie polega na przywróceniu określonego zatwierdzenia.git revert --continue
zgodnie z instrukcją. Działało, ale niestety popełniło wyniki. Być może musiałem to zrobićgit revert --no-commit --continue
.git revert
, jeśli zapomniałeś-n
; ponieważ w tym momencie ostatnim zatwierdzeniem jest cofnięcie, więc miękki reset cofnie to zatwierdzenie, ale nie związane z nim zmiany kodu przywróceniaPonieważ został już wypchnięty, nie powinieneś bezpośrednio manipulować historią.
git revert
przywróci określone zmiany z zatwierdzenia przy użyciu nowego zatwierdzenia, aby nie manipulować historią zatwierdzeń.źródło
Jeśli zatwierdzenie, które chcesz cofnąć, jest zatwierdzeniem scalonym (zostało już scalone), powinieneś wybrać jedną z opcji
-m 1
lub-m 2
opcję, jak pokazano poniżej. Dzięki temu git dowie się, który nadrzędny zatwierdzony ze scalonego zatwierdzenia użyć. Więcej informacji można znaleźć TUTAJ .git revert <commit> -m 1
git revert <commit> -m 2
źródło