Cofa konkretny commit w Git, który został wypchnięty do zdalnych reposów
Jaki jest najprostszy sposób na cofnięcie określonego commita, czyli:
- nie w głowie ani głowie
- został zepchnięty do pilota.
Ponieważ jeśli nie jest to najnowszy commit,
git reset HEAD
Nie działa. A ponieważ został on zepchnięty do pilota,
git rebase -i
I
git rebase --onto
Spowoduje jakiś problem w pilotach.
Bardziej, nie chcę modyfikować historii naprawdę. Jeśli był zły kod, to był w historii i widać. Chcę tylko, żeby to było w wersji roboczej, i nie mam nic przeciwko wstecznemu mergowaniu.
Innymi słowy, jaki jest Git odpowiednik następujących komend svn:
svn merge -r 303:295 http://svn.example.com/repos/calc/trunk
Który usuwa wszystkie zmiany z 295 do 302 poprzez odwrócenie scalenia wszystkich zmian w tych zmianach, jako nowy commit.
svn merge -c -302 ^/trunk
Który wycofuje commit 302, oczywiście dodając inny commit, który odwraca scalanie zmian z danego commita.
Myślałem, że powinno być dość prostą operacją w Git i dość powszechnym przypadkiem użycia. Jaki jest jeszcze cel atomowych zobowiązań?
Mamy staging stashing i wszystko po to, aby upewnić się, że commity są całkowicie atomowe, czy nie powinieneś być w stanie łatwo cofnąć jednego lub więcej z tych commitów atomowych?
4 answers
Zidentyfikuj hash zatwierdzenia, używając git log
, a następnie użyj git revert <commit>
, aby utworzyć nowy commit, który usunie te zmiany. W pewnym sensie, {[2] } jest konwersją git cherry-pick
- ta ostatnia nakłada łatkę na gałąź, która jej brakuje, ta pierwsza usuwa ją z gałęzi, która ją posiada.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-30 16:55:13
Nie podoba mi się auto-commit, który robi git revert
, więc może to być pomocne dla niektórych.
Jeśli chcesz, aby zmodyfikowane pliki nie były automatycznie zatwierdzane , możesz użyć --no-commit
% git revert --no-commit <commit hash>
Który jest taki sam jak -n
% git revert -n <commit hash>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-07 23:14:26
Ponieważ została już wypchnięta, nie powinieneś bezpośrednio manipulować historią. git revert
przywróci określone zmiany z commita używając nowego commita, aby nie manipulować historią zmian.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-23 14:28:46
Jeśli commit, który chcesz przywrócić jest scalonym commitem( został już scalony), powinieneś wybrać opcję -m 1
LUB -m 2
, Jak pokazano poniżej. Dzięki temu git będzie wiedział, który commit nadrzędny scalonego commita ma użyć. Więcej szczegółów można znaleźć tutaj .
git revert <commit> -m 1
git revert <commit> -m 2
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-27 06:34:52