Відкат віддаленого сховища Git


111

У мене є віддалене сховище Git, і мені потрібно відкрутити останні nпоступки в холодне забуття.

Відповіді:


135

Ви можете використовувати git revert <commit>…для всіх російських комісій, а потім натискати як завжди, зберігаючи історію незмінною.

Або ви можете "відкатати" за допомогою git reset --hard HEAD~n. Якщо ви надаєте доступ до загальнодоступного або спільного сховища, ви можете розходитись і порушувати інші роботи на основі вашої оригінальної гілки. Git заважатиме вам це робити, але ви можете використовувати git push -fдля примусового оновлення.


5
Ви можете відкатати до певного комітету, використовуючи: git reset --hard [sha1]де sha1 - ідентифікатор хеш-файлів.
пісарук

7
Ви не можете використовувати get reset --hard у віддаленому сховищі, оскільки немає робочого каталогу. У первинному питанні зазначено лише, що існує віддалене репо, про місцеве репо згадки немає.
Hazok

2
просто зауважте, git push -f змусить натиснути всі локальні гілки на їхні пульти
cowlinator

Зауважте, що використання цих revertфункцій призведе до того, що ваші гілки функцій будуть розглядатися як "вже" об'єднані. Це тому , що ці галузі будуть фактично об'єднані. Але зміни були відмінені. Рішення: Виберіть вишню або скасуйте комісію повернення .
Бенедикт

@Benedikt reset --hardтакож спричиняє, що гілки функцій трактуються як уже об'єднані? Моє припущення, це не було б (куди revertб).
Маркус Леон

37

elmarco вірно ... його пропозиція найкраща для спільних / публічних сховищ (або, принаймні, для публічних відділень). Якщо це не було поділено (або ви готові порушити інших), ви також можете надіслати певну інформацію:

git push origin old_master:master

Або, якщо є певна фіксація SHA1 (скажімо, 1e4f99e у скороченому вигляді), ви хочете повернутися до:

git push origin 1e4f99e:master

9

На щастя, я був у змозі використати рішення Пат Ноца, яке повністю усунуло небажані дії. Однак спочатку я отримав помилку

error: failed to push some refs to 'ssh://git@gitrepo.git'
To prevent you from losing history, non-fast-forward updates were rejected*

Але додавання параметра force ( -f) замінить цю помилку

git push -f origin 52e36b294e:master

3

Якщо у вас є прямий доступ до віддаленого репо, ви завжди можете використовувати:

git reset --soft <sha1>

Це працює, оскільки немає спроби змінити неіснуючий робочий каталог. Для отримання більш детальної інформації див. Оригінальну відповідь:

Як я можу відключити останню команду в голому сховищі?


2
Навіщо --softнавіть потрібно? Можливо, ви могли б зробити те саме, що просто git reset, без прапора режиму.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.